试图概括 c# 函数但得到“无法将'int'转换为'T'”
Posted
技术标签:
【中文标题】试图概括 c# 函数但得到“无法将\'int\'转换为\'T\'”【英文标题】:Trying to generalize c# function but getting "Cannot convert 'int' to 'T'"试图概括 c# 函数但得到“无法将'int'转换为'T'” 【发布时间】:2020-04-23 00:02:02 【问题描述】:我有以下通用函数,它采用 Enum
类型,显示“选项”列表,然后循环/等待用户选择可行的选项:
public static T AskGenericType<T>(string message) where T : Enum
//Display options
Console.WriteLine(message);
foreach (var item in Enum.GetValues(typeof(T)))
Console.WriteLine($"[(int)item] item");
var returnInt = TryParseInput();
while (true)
if (Enum.IsDefined(typeof(T), returnInt))
break;
//Cannot parse input as one of the choices presented from the Enum
Console.WriteLine($"Please choose from one of the options.");
returnInt = TryParseInput();
return (T)returnInt; //<---this produces the compile error
private static int TryParseInput()
int returnInt;
while (!int.TryParse(Console.ReadLine(), out returnInt))
//Cannot parse input as an integer
Console.WriteLine($"Selection is not a number. Please try again.");
return returnInt;
如果我从函数定义和代码块中完全删除 <T>
泛型,我可以让函数工作。我得到的错误是:
无法将类型“int”转换为“T”
我正在寻找有关如何通过循环保留函数的通用性质的建议,因为我有几个 Enum
类型要迭代,我不想为每个类型重复代码。
更新:我觉得这不是重复的,因为我引用了 Enum
的整数,而其他引用的重复项没有尝试解析 Enum
完全没有。
【问题讨论】:
可能重复:***.com/questions/29482/how-to-cast-int-to-enum 您需要将 T 限制为枚举 ***.com/questions/79126/… @JoelWiklund OP 显然在第一行就做到了 试试return (T)Enum.ToObject(typeof(T), returnInt);
这能回答你的问题吗? Cast Int to Generic Enum in C#
【参考方案1】:
更改为return (TEnum)Enum.ToObject(typeof(TEnum), returnInt);
。更多信息here。
public class Program
public static void Main()
var favoriteColor = AskGenericType<Color>("What is your favorite color?");
Console.WriteLine(favoriteColor);
var favoriteCar = AskGenericType<Car>("What is your favorite car?");
Console.WriteLine(favoriteCar);
enum Color
Red,
Blue,
Yellow
enum Car
Volvo,
Lamborghini,
Ferrari
public static TEnum AskGenericType<TEnum>(string message) where TEnum : struct, Enum
//Display options
Console.WriteLine(message);
foreach (var item in Enum.GetValues(typeof(TEnum)))
Console.WriteLine($"[(int)item] item");
var returnInt = TryParseInput();
while (true)
if (Enum.IsDefined(typeof(TEnum), returnInt))
break;
//Cannot parse input as one of the choices presented from the Enum
Console.WriteLine($"Please choose from one of the options.");
returnInt = TryParseInput();
return (TEnum)Enum.ToObject(typeof(TEnum), returnInt);
private static int TryParseInput()
int returnInt;
while (!int.TryParse(Console.ReadLine(), out returnInt))
//Cannot parse input as an integer
Console.WriteLine($"Selection is not a number. Please try again.");
return returnInt;
输出
What is your favorite color?
[0] Red
[1] Blue
[2] Yellow
1
Blue
What is your favorite car?
[0] Volvo
[1] Lamborghini
[2] Ferrari
0
Volvo
【讨论】:
以上是关于试图概括 c# 函数但得到“无法将'int'转换为'T'”的主要内容,如果未能解决你的问题,请参考以下文章
在数据库项目中将 Int 更改为 uniqueidentifier
似乎无法将 int 转换为 linq 表达式中的字符串 [重复]
将Json反序列化为Entity Framework无法将int转换为type