2016-05-14 53 views
0

我本質上是試圖從對象列表中拉回自定義類而不暴露我的列表。下面是我如何運作,但我不認爲這是最優雅的方式。另外 - 如何在不實例化新類的情況下調用此調用的實例?我想盡一切努力。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

我完全不明白你想要什麼。但這裏是使用一些基本思想的正確版本:

  1. 使用static方法檢索controller。由於找不到請求的名稱controller,我們需要調用一些外部請求函數。所以最好的辦法就是使的功能returned type
  2. 在InternalLibrary中使用靜態list,所以它只會被創建(或評估)一次。
  3. 使用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" 
       } 
      }; 
    } 
} 

而且你可以使用此類似這樣(注意controller可能是null

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

附:我沒有刪除InternalLibrary類,假設這不僅僅是一個硬編碼列表,而是一些分離的邏輯的複雜類。

相關問題