(T defaultValue = default(T))"?-6ren"> (T defaultValue = default(T))"?-我有一个简单的方法: public static T GetValue(SqlDataReader reader, int columnIndex, T defaultValue = default(-6ren">
gpt4 book ai didi

c# - .NET 类型推断 : can't infer usage of "T GetValue(T defaultValue = default(T))"?

转载 作者:行者123 更新时间:2023-11-30 13:48:46 25 4
gpt4 key购买 nike

我有一个简单的方法:

public static T GetValue<T>(SqlDataReader reader, int columnIndex, T defaultValue = default(T))
{
return reader.IsDBNull(columnIndex) ? defaultValue : (T)reader[columnIndex];
}

及其用法:

string s = SqlUtils.GetValue<string>(reader, nameOrd);

我问自己,为什么我必须指定 <string>如果从使用中可以清楚地看出返回参数的类型是字符串?但显然我必须这样做,否则编译器会提示 The type arguments cannot be inferred from the usage... .我的逻辑在哪里失败?

最佳答案

Where is my logic fails?

无处可去。根据规范 ( 25.6.4 Inference of Type Arguments ),编译器仅使用参数而不是返回值进行泛型类型推断(我提醒您,您在方法调用中省略了默认值参数,因此违反了此​​规则)。因此,如果您想使用 C#,规范只是告诉您泛型类型推断仅对返回类型是不可能的。或者简单地使用其他一些允许这样做的 CLS 语言。 C# 没有。

关于c# - .NET 类型推断 : can't infer usage of "T GetValue<T>(T defaultValue = default(T))"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11513230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com