在我的ASP.NET网站中,我有一个返回类型dynamic
的值的方法。根据某些标准和结果,此方法将返回布尔值或SortedList。
要粘贴的代码太多,但例如:
public dynamic ReturnThis(dynamic value)
{
if(someConditionIsMet)
{
value = true;
}
else
{
value = new List<String>().Add(new Person() { Name = "Travis" });
}
return value;
}
我的问题是,我想在执行或读取其数据之前调用此方法后确定值的datatype
。但我不确定如何检查dynamic value
的类型。我怎么能这样做?
答案 0 :(得分:19)
请在另一个问题上阅读此内容...希望它能为您解决问题:
Type unknown = ((ObjectHandle)tmp).Unwrap().GetType();
阅读并提交此问题以获取更多信息: get the Type for a object declared dynamic
答案 1 :(得分:13)
您应该能够使用GetType()
。像这样:
dynamic returnedValue = ReturnThis(value);
var returnType = returnedValue.GetType();
答案 2 :(得分:12)
这两种解决方案都适合我。在链接到的Smeegs文档中,提到了is
关键字。我想出了一个更易读的解决方案:
if(value is Boolean) { }
和if(value is List<Person>) { }
工作测试:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3348
{
class Program
{
class Person
{
string Name = "";
}
static void Main(string[] args)
{
Console.WriteLine("Assigning List to value");
dynamic value = new List<Person>();
if (value is List<Person>)
{
Console.WriteLine("value is a list");
}
value = false;
Console.WriteLine("Assigning bool to value");
if (value is Boolean)
{
Console.WriteLine("value is bool");
}
Console.Read();
}
}
}
答案 3 :(得分:3)
给定动态类型:
dynamic dynVar;
Type type;
一个仅仅声明的,未初始化的dynamic
变量dynVar
将抛出异常
在通过{{1}执行Type- Reflection 时,在执行对空引用的运行时绑定时,键入 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException }。
正如特洛伊卡尔森&#34;所指出的那样,人们可以通过远程MarshalByRefObject使用相当慢的方法:
dynVar.GetType()
但对任何其他类型进行简单的空检查就足够了:
Type type = ((ObjectHandle)dynVar).Unwrap().GetType();
// > type...is null
...或
type = dynVar == null ? null : dynVar.GetType();
答案 4 :(得分:0)
dynamic dyn = 1;
Type t = ((object)dyn).GetType();
工作正常!