Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对组合框使用匿名类型的nameof_C#_Anonymous Types - Fatal编程技术网

C# 对组合框使用匿名类型的nameof

C# 对组合框使用匿名类型的nameof,c#,anonymous-types,C#,Anonymous Types,目前,对于我的组合框绑定,我这样写: comboBox1.DataSource = DataList .Select(x => new { Value = x, Display = x.ToString() }) .ToList(); comboBox1.DisplayMember = "Display"; comboBox1.ValueMember = "Value"; 我正在使用匿名类型为comboBox1.DataSource创建一

目前,对于我的
组合框
绑定,我这样写:

        comboBox1.DataSource = DataList
.Select(x => new { Value = x, Display = x.ToString() })
.ToList();
        comboBox1.DisplayMember =  "Display";
        comboBox1.ValueMember = "Value";
我正在使用匿名类型为
comboBox1.DataSource
创建一个新类型,然后为
comboBox1.DisplayMember
comboBox1.ValueMember
指定要绑定的属性

我不喜欢这种方法的地方是,我必须硬编码属性名(例如:“Display”和“Value”),我宁愿使用
nameof
或其他任何东西,如果我输入错误,它们可以保证编译时失败(而不是运行时)

我是否可以在匿名类型中使用
nameof


当然,我不想为了这个目的创建一个类(在我看来太浪费了)。

这应该行得通。
数据源
是您的敌人,因为它属于
对象类型
。顺便问一下,您确定
DataList
始终不为空吗?考虑为此添加NULL检查。

var source = DataList.Select(x => new { Value = x, Display = x.ToString() });
var first = source.FirstOrDefault();

comboBox1.DisplayMember = nameof(first.Display);
comboBox1.ValueMember = nameof(first.Value);
comboBox1.DataSource = source.ToList();

这应该行得通。
数据源
是您的敌人,因为它属于
对象类型
。顺便问一下,您确定
DataList
始终不为空吗?考虑为此添加NULL检查。

var source = DataList.Select(x => new { Value = x, Display = x.ToString() });
var first = source.FirstOrDefault();

comboBox1.DisplayMember = nameof(first.Display);
comboBox1.ValueMember = nameof(first.Value);
comboBox1.DataSource = source.ToList();


您可以使用标准反射。@Enigmativity,这是什么?IMO反射将涉及更多的属性硬编码name@Graviton:那是另一个问题。您仍然会得到编译时属性名检查,这就是这个问题的全部内容。@Graviton:如果您的意思是担心nameof(x[0].Display)会因为x[0]为null而失败,那么它不会。它肯定会成功,因为nameof在编译时工作,编译器知道x[0]将始终是您的匿名类型,并且不需要实例来验证它。@BoltClock我也很确定它会工作,但当我尝试时,它不会编译,因为“表达式不能用于nameof的参数”。您可以使用标准反射。@Enigmativity,哪个是?IMO反射将涉及更多的属性硬编码name@Graviton:那是另一个问题。您仍然会得到编译时属性名检查,这就是这个问题的全部内容。@Graviton:如果您的意思是担心nameof(x[0].Display)会因为x[0]为null而失败,那么它不会。它肯定会成功,因为nameof在编译时工作,编译器知道x[0]将始终是您的匿名类型,并且不需要实例来验证它。@BoltClock我也很确定它会工作,但当我尝试时,它不会编译,因为“表达式不能用于nameof参数”。这很好,但是,如果(first!=null),实际上不需要检查
,那么它就可以正常工作。而且您也不需要检查
源代码
是否为null(使用
源代码?
),因为
ToList
不能返回null。@Evk哦,我不知道。我只是这样假设,因为它是引用类型。谢谢你。编辑答案。@Evk实际上,如果
source
是一个空列表,
FirstOrDefault
将返回
null
,因此应该检查
first
是否为null。另一件事正如您所说的。不,它不会,因为nameof将不仅仅从表达式中提取名称,所以它将像
comboBox1.DisplayMember=“Display”
一样编译,不会有
的痕迹。Display
左侧,并且不会在运行时对其进行计算。您可以自己试试看,如果first为null,它不会抛出任何异常。@Evk哦,没错!我应该看到的。谢谢,我现在就要停下来,学着相信你了,哈哈。这很好,但是你实际上不需要检查
,如果(first!=null)
,没有它就可以了。而且您也不需要检查
源代码
是否为null(使用
源代码?
),因为
ToList
不能返回null。@Evk哦,我不知道。我只是这样假设,因为它是引用类型。谢谢你。编辑答案。@Evk实际上,如果
source
是一个空列表,
FirstOrDefault
将返回
null
,因此应该检查
first
是否为null。另一件事正如您所说的。不,它不会,因为nameof将不仅仅从表达式中提取名称,所以它将像
comboBox1.DisplayMember=“Display”
一样编译,不会有
的痕迹。Display
左侧,并且不会在运行时对其进行计算。您可以自己试试看,如果first为null,它不会抛出任何异常。@Evk哦,没错!我应该看到的。谢谢,我要从现在开始停下来,学着相信你,哈哈。