gpt4 book ai didi

c# - 如何创建泛型方法以返回调用指定的特定类型?

转载 作者:太空狗 更新时间:2023-10-29 22:05:26 25 4
gpt4 key购买 nike

以下代码给出了错误:

Cannot implicitly convert type T to string.
Cannot implicitly convert type T to int.

我必须怎么做才能让这个方法在我调用它时返回我用 T 定义的变量类型?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestGener234
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("his first name is {0}", GetPropertyValue<string>("firstName"));
Console.WriteLine("his age is {0}", GetPropertyValue<int>("age"));
}

public static T GetPropertyValue<T>(string propertyIdCode)
{
if (propertyIdCode == "firstName")
return "Jim";
if (propertyIdCode == "age")
return 32;
return null;
}
}
}

附录:

这是一个更完整的示例,说明了为什么我需要通用解决方案,即我有一个类,无论类型如何,它都将其值保存为字符串,而这个通用解决方案只是让调用代码更清晰:

using System;
using System.Collections.Generic;

namespace TestGener234
{
class Program
{
static void Main(string[] args)
{
List<Item> items = Item.GetItems();
foreach (var item in items)
{
string firstName = item.GetPropertyValue<string>("firstName");
int age = item.GetPropertyValue<int>("age");
Console.WriteLine("First name is {0} and age is {1}.", firstName, age);
}
Console.ReadLine();
}
}

public class Item
{
public string FirstName { get; set; }
public string Age { get; set; }


public static List<Item> GetItems()
{
List<Item> items = new List<Item>();
items.Add(new Item { FirstName = "Jim", Age = "34" });
items.Add(new Item { FirstName = "Angie", Age = "32" });
return items;
}

public T GetPropertyValue<T>(string propertyIdCode)
{
if (propertyIdCode == "firstName")
return (T)(object)FirstName;
if (propertyIdCode == "age")
return (T)(object)(Convert.ToInt32(Age));
return default(T);
}
}
}

最佳答案

那就麻烦了;为了使编译器满意,您可以进行双重转换,但这意味着值类型有一个框:

    public static T GetPropertyValue<T>(string propertyIdCode)
{
if (propertyIdCode == "firstName")
return (T)(object)"Jim";
if (propertyIdCode == "age")
return (T)(object)32;
return default(T);
}

实际上,我认为您最好只使用 object 返回类型。

关于c# - 如何创建泛型方法以返回调用指定的特定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162002/

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