2016-05-14 1 views
0

私は基本的に私のリストを公開することなく、オブジェクトのリストからカスタムクラスを引き戻すしようとしているを維持しながら、メソッドを公開するための最良の方法。以下はどのように私はそれが働くようになったが、私はこれが最もエレガントな方法だとは思わない。また、新しいクラスをインスタンス化せずにこの呼び出しのインスタンスを呼び出すにはどうすればよいですか?私はすべてを1行でやりたい。私はここに1行でC#プライベートリスト

Library.ConnectionController cc = new Library.ConnectionController(); 
cc = cc.Request("z"); 

を私の要求を呼び出し、できるようにしたいと思い

は、私のクラスは

ある​​

答えて

0

これは簡単な方法で書かれたコードのバージョンです

その後、
namespace Library 
{ 
public class ConnectionController 
{ 
    private static readonly List<ConnectionController> CcList = new List<ConnectionController> 
    { 
     new ConnectionController 
     { 
      UserName = "x", 
      Password = "y", 
      ProjectName = "r", 
      Domain = "z", 
      SQLDatabase = "a", 
      SQLServer = "b" 
     } 
    }; 

    public string UserName { get; set; } 
    public string Password { get; set; } 
    public string ProjectName { get; set; } 
    public string Domain { get; set; } 
    public string SQLServer { get; set; } 
    public string SQLDatabase { get; set; } 

    public static ConnectionController Request(string domain) 
    { 
     return CcList.Where(m => m.Domain.ToUpper() == domain.ToUpper()) 
      .Select(m => new ConnectionController 
      { 
       UserName = m.UserName, 
       Password = m.Password, 
       ProjectName = m.ProjectName, 
       Domain = m.Domain, 
       SQLServer = m.SQLServer, 
       SQLDatabase = m.SQLDatabase 
      }).ToList()[0]; 
    } 
} 
} 

あなたでし

var requesteed = ConnectionController.Request("x"); 
0

私はあなたが望むものを正確に理解していませんでした。 controllerを取得するためにstaticメソッドを使用して

  1. :しかし、ここでいくつかの基本的な考え方を使用してバージョンを補正しています。リクエストされた名前のあるcontrollerが存在しない可能性があるので、外部リクエスト関数を呼び出す必要があります。したがって、最も良い方法はstaticの機能をreturned typeにすることです。それは一度だけ作成(または、評価)されますので、InternalLibraryに静的listを使用して
  2. 空の結果があるかもしれないので、FirstOrDefault()LINQ拡張メソッドを使用します。

    public class Library 
    { 
        public class ConnectionController 
        { 
         public string UserName { get; set; } 
         public string Password { get; set; } 
         public string ProjectName { get; set; } 
         public string Domain { get; set; } 
         public string SQLServer { get; set; } 
         public string SQLDatabase { get; set; } 
    
         public static ConnectionController Request(string Domain) 
         { 
          return InternalLibrary.ccList. 
           Where(m => m.Domain.Equals(Domain, 
              StringComparison.CurrentCultureIgnoreCase)). 
           FirstOrDefault(); 
         } 
        } 
    
        private class InternalLibrary 
        { 
         public static readonly List<ConnectionController> ccList = 
          new List<ConnectionController> 
          { 
           new ConnectionController() 
           { 
            UserName = "x", 
            Password="y", 
            ProjectName="r", 
            Domain = "z", 
            SQLDatabase = "a", 
            SQLServer = "b" 
           } 
          }; 
        } 
    } 
    

    そして、あなたはこのようにこれを使用することができます(controllernull可能性があることに注意してください)

    var controller = Library.ConnectionController.Request("z"); 
    

    P.S.:

ここでは、コードです私はInternalLibraryクラスを削除しませんでした。これは単なるハードコードされたリストではなく、いくつかの分離されたロジックを持つ複雑なクラスであると仮定しています。