我有一个包含问题答案的课程
答案存储在字符串
中我创建了一个类似的方法:
public void set_answer(object obj){
.....
}
这将把一个变量作为争论,并根据问题类型将其更改为字符串表示,因此,例如,如果答案是一个字符串,它将保持原样,如果它是一个DateTime它将将其更改为yyyy-MM-dd格式以及大约8个其他转换
我希望创建相反的方法,它将返回原始类型的答案
我有以下代码:
public T? get_answer<T>() {
//this means that the answer has not been set yet
if (string.IsNullOrWhiteSpace(_answer)) return null;
object reply = null;
switch (_answer_type) {
...do stuff here to transform the string to the correct type, which will match T
}
<here is the problem>
}
在此代码的末尾,reply变量将包含null或T
类型的变量我该如何返回该值?
在我的代码中,我会像这样使用它:
DateTime? date = question.get_answer<DateTime>();
如果尚未设置答案或请求的类型不正确,则应返回null(即要求在Tupple问题上提供日期时间答案)
提前感谢您提供的任何帮助
答案 0 :(得分:0)
如果您有MyMethod<T>
,并且大部分内容都包含if (T is Type1) {...} else if (T is Type2) {...} else if [etc]
等代码,那么通常不应该首先使用通用方法
在这种情况下,我建议使用它:
public class MyClass
{
public string _answer;
public DateTime? GetDate()
{
DateTime result;
if (DateTime.TryParse(_answer, out result)) return result;
return null;
}
public int? GetInt()
{
int result;
if (int.TryParse(_answer, out result)) return result;
return null;
}
// etc
}
并测试它:
public void TestIt()
{
var x = new MyClass { _answer = "gaga" };
var d = x.GetDate();
var i = x.GetInt();
// etc
}
或者如果你必须使用一个obj ...
public void TestIt()
{
var x = new MyClass { _answer = "gaga" };
object obj = x.GetDate();
if (obj == null) obj = x.GetInt();
// etc
}
或者在一个声明中:
public void TestIt()
{
var x = new MyClass { _answer = "gaga" };
var obj = (object) x.GetDate() ?? x.GetInt() /* ?? [etc] */ ;
}