Nested Ternary Implicit type Conversion issue: 无法确定条件表达式的类型,因为它们之间没有隐式转换
Nested Ternary Implicit type Conversion issue: Type of conditional expression cannot be determined because there is no implicit conversion between
我过去经常在 C# 中使用嵌套三元组。在我引入了一个事件处理程序之后,作为赋值操作,出现了错误:"Type of conditional expression cannot be determined because there is no implicit conversion between 'void' and 'void'"
这是我正在编写的代码的两个片段,上面一个是函数式的,下面一个给出了类型转换错误:
AppTableConfigCollection collection =
tableType == TableType.Attribute
? _attributeTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.ATTRIBUTE)
: tableType == TableType.Core
? _coreTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.CORE)
: tableType == TableType.Domain
?_domainTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.DOMAIN)
: tableType == TableType.Configuration
?_configTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.CONFIG)
:_offlineTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.OFFLINE);
PropertyChangedEventHandler property =
tableType == TableType.Attribute
? _attributeTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
: tableType == TableType.Core
? _coreTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
: tableType == TableType.Domain
? _domainTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
: tableType == TableType.Configuration
? _configTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
: _offlineTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
感谢您提供的任何帮助!
首先,一定要听听评论者的意见。 Switch/case 看起来确实会产生更易读、更可维护的代码。
其次,您在第二个代码片段中尝试做的是将您的 属性 更改处理程序设置为订阅处理程序的结果,这是无效的。
具体来说,_attributeTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
不是 return 值——它 return 是 void
。所以,你的任务是不可能的。
您必须分步完成您想做的事情。
例如:
PropertyChangedEventHandler handler;
switch (tableType)
{
case TableType.Attribute:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_attributeTableConfigs.PropertyChanged += handler;
break;
case TableType.Core:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_coreTableConfigs.PropertyChanged += handler;
break;
case TableType.Domain:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_domainTableConfigs.PropertyChanged += handler;
break;
case TableType.Configuration:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_configTableConfigs.PropertyChanged += handler;
break;
default:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_offlineTableConfigs.PropertyChanged += handler;
break;
}
或者,如果处理程序始终相同:
PropertyChangedEventHandler handler = appTableConfigs_PropertyChanged;
switch (tableType)
{
case TableType.Attribute:
_attributeTableConfigs.PropertyChanged += handler;
break;
case TableType.Core:
_coreTableConfigs.PropertyChanged += handler;
break;
case TableType.Domain:
_domainTableConfigs.PropertyChanged += handler;
break;
case TableType.Configuration:
_configTableConfigs.PropertyChanged += handler;
break;
default:
_offlineTableConfigs.PropertyChanged += handler;
break;
}
我建议使用 switch 语句,因为它更易于阅读和更新
switch (tableType)
{
case TableType.Attribute:
_attributeTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.ATTRIBUTE);
_attributeTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
break;
case TableType.Core:
_coreTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.CORE);
_coreTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
break;
case TableType.Domain:
_domainTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.DOMAIN);
_domainTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
break;
case TableType.Configuration:
_configTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.CONFIG);
_configTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
break;
default:
_offlineTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.OFFLIINE);
_offlineTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
break;
}
我过去经常在 C# 中使用嵌套三元组。在我引入了一个事件处理程序之后,作为赋值操作,出现了错误:"Type of conditional expression cannot be determined because there is no implicit conversion between 'void' and 'void'"
这是我正在编写的代码的两个片段,上面一个是函数式的,下面一个给出了类型转换错误:
AppTableConfigCollection collection =
tableType == TableType.Attribute
? _attributeTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.ATTRIBUTE)
: tableType == TableType.Core
? _coreTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.CORE)
: tableType == TableType.Domain
?_domainTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.DOMAIN)
: tableType == TableType.Configuration
?_configTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.CONFIG)
:_offlineTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.OFFLINE);
PropertyChangedEventHandler property =
tableType == TableType.Attribute
? _attributeTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
: tableType == TableType.Core
? _coreTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
: tableType == TableType.Domain
? _domainTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
: tableType == TableType.Configuration
? _configTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
: _offlineTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
感谢您提供的任何帮助!
首先,一定要听听评论者的意见。 Switch/case 看起来确实会产生更易读、更可维护的代码。
其次,您在第二个代码片段中尝试做的是将您的 属性 更改处理程序设置为订阅处理程序的结果,这是无效的。
具体来说,_attributeTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
不是 return 值——它 return 是 void
。所以,你的任务是不可能的。
您必须分步完成您想做的事情。
例如:
PropertyChangedEventHandler handler;
switch (tableType)
{
case TableType.Attribute:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_attributeTableConfigs.PropertyChanged += handler;
break;
case TableType.Core:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_coreTableConfigs.PropertyChanged += handler;
break;
case TableType.Domain:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_domainTableConfigs.PropertyChanged += handler;
break;
case TableType.Configuration:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_configTableConfigs.PropertyChanged += handler;
break;
default:
handler = new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
_offlineTableConfigs.PropertyChanged += handler;
break;
}
或者,如果处理程序始终相同:
PropertyChangedEventHandler handler = appTableConfigs_PropertyChanged;
switch (tableType)
{
case TableType.Attribute:
_attributeTableConfigs.PropertyChanged += handler;
break;
case TableType.Core:
_coreTableConfigs.PropertyChanged += handler;
break;
case TableType.Domain:
_domainTableConfigs.PropertyChanged += handler;
break;
case TableType.Configuration:
_configTableConfigs.PropertyChanged += handler;
break;
default:
_offlineTableConfigs.PropertyChanged += handler;
break;
}
我建议使用 switch 语句,因为它更易于阅读和更新
switch (tableType)
{
case TableType.Attribute:
_attributeTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.ATTRIBUTE);
_attributeTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
break;
case TableType.Core:
_coreTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.CORE);
_coreTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
break;
case TableType.Domain:
_domainTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.DOMAIN);
_domainTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
break;
case TableType.Configuration:
_configTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.CONFIG);
_configTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged)
break;
default:
_offlineTableConfigs = new AppTableConfigCollection(_db, AppTableConfigCollection.OFFLIINE);
_offlineTableConfigs.PropertyChanged += new PropertyChangedEventHandler(appTableConfigs_PropertyChanged);
break;
}