以下代码给出了错误:
Cannot implicitly convert type T to string.
Cannot implicitly convert type T to int.
Run Code Online (Sandbox Code Playgroud)
当我调用它时,我该怎么做才能让这个方法返回我用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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个更完整的例子,说明为什么我需要通用解决方案,即我有一个类,无论类型如何都将其值保存为字符串,这种通用解决方案只是使调用代码更清晰:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 13
这很麻烦; 为了使编译器满意,你可以进行双重转换,但这意味着值类型的框:
public static T GetPropertyValue<T>(string propertyIdCode)
{
if (propertyIdCode == "firstName")
return (T)(object)"Jim";
if (propertyIdCode == "age")
return (T)(object)32;
return default(T);
}
Run Code Online (Sandbox Code Playgroud)
实际上,我认为使用object返回类型可能会更好.
| 归档时间: |
|
| 查看次数: |
9681 次 |
| 最近记录: |