uSe*_*AhA 22 .net c# asp.net types dynamic
在我的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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我想datatype在执行或读取其数据之前调用此方法之后确定值.但我不确定如何检查是什么类型dynamic value.我怎样才能做到这一点?
Tro*_*son 20
只是在另一个问题上阅读这个...希望它会为你做到这一点:
Type unknown = ((ObjectHandle)tmp).Unwrap().GetType();
Run Code Online (Sandbox Code Playgroud)
阅读并upvote这个问题以获取更多信息: 获取声明为动态的对象的Type
Sme*_*egs 18
你应该只能使用GetType().像这样:
dynamic returnedValue = ReturnThis(value);
var returnType = returnedValue.GetType();
Run Code Online (Sandbox Code Playgroud)
uSe*_*AhA 14
这两种解决方案都适合我.在链接到的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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
dynamic dyn = 1;
Type t = ((object)dyn).GetType();
Run Code Online (Sandbox Code Playgroud)
效果很好!
给定一个动态类型:
dynamic dynVar;
Type type;
Run Code Online (Sandbox Code Playgroud)
一个仅仅声明,未初始化的dynamic变量dynVar将抛出类型的异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException为您执行运行时对空引用结合进行固定-时,反射通过dynVar.GetType()。
正如“Troy Carlson”所指出的那样,可以通过远程MarshalByRefObject使用相当慢的方法:
Type type = ((ObjectHandle)dynVar).Unwrap().GetType();
// > type...is null
Run Code Online (Sandbox Code Playgroud)但是对于任何其他类型的简单空检查就足够了:
type = dynVar == null ? null : dynVar.GetType();
Run Code Online (Sandbox Code Playgroud)或者...
type = dynVar?.GetType();
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
40455 次 |
| 最近记录: |