Ant*_*Tcb 0 c# conditional-operator
我有两个类实现IMyInterface返回类型的异步方法Task<IMyInterface>.
为什么我的return语句收到编译器错误"没有隐式转换类型" return SomeBooleanDeterminedByTheMethod ? Class1 : new Class2();,解决此问题的最佳步骤是什么?
完整方法:
public static async Task<IMyInterface> MyMethodAsync(Subclass1 Class1Child)
{
var listOfThings = new List<Tuple<int, Class1>>();
await Task.Run(() =>
{
foreach (var item in SomeCollection)
{
var DummyClass1 = new Class1() {IntProperty = 0};
var computationResult = new Tuple<int, Class1>( DummyClass1.IntProperty, DummyClass1);
listOfThings.Add(computationResult);
}
}
try
{
var returnedClass1 = (from items in listOfThings
orderby items.Item1
select items.Item2).FirstOrDefault();
return returnedClass1.BooleanProperty ? returnedClass1 : new Class2();
}
catch ... // Not relevant.
}
class Class1 : IMyInterface
{
public int IntProperty { get; set;}
public bool BooleanProperty => IntProperty % 2 == 1; // So, in my example, BooleanProperty will return false.
}
class Class2 : IMyInterface
{
// This class serves as a separate class to indicate a different Type to be used for my program.
}
interface IMyInterface { }
Run Code Online (Sandbox Code Playgroud)
正如运营商的文档所述?::
给出条件表达式: condition ? first_expression : second_expression;
first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换.
由于Class1或Class2都不是同一类型,两者之间也不存在隐式转换,因此可以将first_expression或者second_expression转换为接口类型,如下所示:
return SomeBooleanDeterminedByTheMethod ? (IMyInterface)Class1 : new Class2();
Run Code Online (Sandbox Code Playgroud)
然后编译器将知道表达式应该求值为IMyInterface.
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |