C# 如何使用匿名方法初始化静态只读变量?
我试图清理初始化静态只读变量的代码 原件:C# 如何使用匿名方法初始化静态只读变量?,c#,static,delegates,anonymous-function,static-members,C#,Static,Delegates,Anonymous Function,Static Members,我试图清理初始化静态只读变量的代码 原件: public static readonly List<int> MyList; //Initialize MyList in the static constructor static MyObject() { ... } 公共静态只读列表MyList; //在静态构造函数中初始化MyList 静态MyObject(){…} 我决定清理它,因为代码分析说我不应该使用静态构造函数(CA1810) 清理: public static
public static readonly List<int> MyList;
//Initialize MyList in the static constructor
static MyObject() { ... }
公共静态只读列表MyList;
//在静态构造函数中初始化MyList
静态MyObject(){…}
我决定清理它,因为代码分析说我不应该使用静态构造函数(CA1810) 清理:
public static readonly List<int> MyList = GetMyList();
//Returns the list
private static List<int> GetMyList() { ... }
公共静态只读列表MyList=GetMyList();
//返回列表
私有静态列表GetMyList(){…}
我真的不喜欢这个额外的方法,所以我想我应该尝试让它全部内联,但它不会工作。我不确定我做错了什么
public static readonly List<int> MyList =
() =>
{
...
return list;
};
公共静态只读列表MyList=
() =>
{
...
退货清单;
};
我试图在
GetMyList()
方法中获取代码并将其放置在匿名委托中以返回要分配的列表,但它表示我正在尝试将委托
转换为列表
?它表示正确<代码>()=>…返回一个委托。但你需要一份清单。因此,您必须调用此委托并获得结果。原因是当您编写
() =>
{
...
return list;
};
您实际上是在声明一个委托—一个返回List
的函数,但实际上并没有调用该函数,因此它的计算结果是Func
,而不是List
我不太清楚为什么要删除静态构造函数。静态构造函数有其用途,在某些情况下甚至可以使代码更干净、更可读
它说我正在尝试将代理转换为列表
那是因为你是。请记住,定义lambda与调用lambda不同。你必须做一些更像这样的事情:
Func<List<int>> createList = () => { ... return list; };
MyList = createList();
Func createList=()=>{…返回列表;};
MyList=createList();
这看起来有点奇怪,但试试这个:
public static readonly List<int> MyList = new Func<List<int>>(
() =>
{
// Create your list here
return new List<int>();
})();
public静态只读列表MyList=new Func(
() =>
{
//在这里创建您的列表
返回新列表();
})();
诀窍是创建一个新的
Func
并调用它。您应该立即调用它,使其成为一个列表:
public static readonly List<int> MyList = new Func<List<int>>(() => {
return new List<int>();
})(); //<-- the parentheses that invoke
publicstatic只读列表MyList=newfunc(()=>{
返回新列表();
})(); // 正如许多人所说,plain()=>{…}
返回委托或表达式。我认为为列表初始化创建一个单独的私有静态
方法比()=>{…}()
或()=>{…}.Invoke()
您忘记了括号。使用以下命令:
public static readonly List<int> MyList = (() =>
{
...
return list;
});
公共静态只读列表MyList=(()=>
{
...
退货清单;
});
+1。是的,要得到结果,需要调用函数。。。此外,我更喜欢它的单独功能。“iffe”在JavaScript中看起来更自然:)这很奇怪,也许最好用一个标准方法来保存它?@michael也许——取决于你认为什么更可读和更易于维护。这些值是常数吗?您是否可以使用公共静态只读列表MyList=newlist{1,2,3}代码>?不,不止这些,否则内联它会非常容易。顺便说一句,您建议的替代语法(但由于可读性较差)不会编译。(我建议删除此答案。)警告:不会编译。在测试了一个不同的变体之后,在一个不同的情况下,我对它进行了升级,我确实需要一个代表,而不是一个评估。现在不能改变我的投票。