有没有办法根据我在运行时知道类的名称来创建类的实例.基本上我会在字符串中有类的名称.
如果我收到一个包含类名称的字符串,并且我想将此字符串转换为实际类型(字符串中的那个),我该怎么做?
我试过了
Type.GetType("System.Int32")
Run Code Online (Sandbox Code Playgroud)
例如,它似乎工作.
但是当我尝试使用自己的对象时,它总是返回null ...
我不知道提前在字符串中会有什么,所以它是我将其转换为真实类型的唯一来源.
Type.GetType("NameSpace.MyClasse");
Run Code Online (Sandbox Code Playgroud)
任何的想法?
我有一个方法,我需要解决类的类型.此类存在于另一个程序集中,该命名空间类似于:
MyProject.Domain.Model
Run Code Online (Sandbox Code Playgroud)
我试图执行以下操作:
Type.GetType("MyProject.Domain.Model." + myClassName);
Run Code Online (Sandbox Code Playgroud)
如果执行此操作的代码与我尝试解析其类型的类在同一程序集中,则此方法很有用,但是,如果我的类位于不同的程序集中,则此代码将失败.
我确信有一个更好的方法来完成这个任务,但是我没有很多经验来解析程序集和遍历名称空间来解决我正在寻找的类的类型.有关更优雅地完成此任务的任何建议或提示吗?
我使用VS2008中的设置设计器管理我的应用程序设置.
"user.config文件的确切路径如下所示:"
<Profile Directory>\<Company Name>\
<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config
Run Code Online (Sandbox Code Playgroud)
有没有办法定制这条路径?我更喜欢这样的东西:
<Profile Directory>\<Company Name>\
<App Name>\<Version>\user.config
Run Code Online (Sandbox Code Playgroud)
我注意到新创建的文件夹("Test Company" - >"Test_Company")中的"公司名称"中的下划线替换了空格.我真的希望关闭这种行为.
你知道,我可以写一个新的基于XML的设置处理程序,但我想使用设置设计器.
我正在尝试使用Type.GetType并传递"caLibClient.entity.Web2ImageEntity"完整的类名.caLibClient.entity是名称空间,位于分离的程序集(caLibClient)中,并添加到程序引用程序集列表中.当我从程序中调用它时,Type.GetType总是返回Null,这有什么问题?
我有一个使用usercontrols动态创建网页的Web应用程序.
在我的代码中,我有以下内容:
private void Render_Modules()
{
foreach (OnlineSystemPageCustom.OnlineSystemPageHdr.OnlineSystemPageModule item in custompage.Header.Modules)
{
if (item.ModuleCustomOrder != 99 && !item.ModuleOptional)
{
string typeName = item.ModuleInternetFile;
Type child = Type.GetType(typeName);
webonlinecustombase ctl = (webonlinecustombase)Page.LoadControl("../IPAM_Controls/webtemplatecontrols/" + child.Name.ToString() + ".ascx");
ctl.Event = Event;
ctl.custompage = custompage;
ctl.custommodule = item;
this.eventprogrammodules.Controls.Add(ctl);
}
}
}
Run Code Online (Sandbox Code Playgroud)
返回的"typeName"(示例)是:
IPAMIntranet.IPAM_Controls.webtemplatecontrols.eventorgcommittee
用户控件的命名空间如下:
namespace IPAMIntranet.IPAM_Controls
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是Type.GetType(typeName)返回null.我在这里错过了什么?
我刚刚注意到函数中的一个错误:
Type.GetType("System.Uri");
Run Code Online (Sandbox Code Playgroud)
返回值为null,而以下函数运行良好...
Type.GetType("System.string");
Type.GetType("System.bool");
Type.GetType("System.DateTime");
Run Code Online (Sandbox Code Playgroud)
...
任何人都知道,为什么返回的Type为null?
编辑:删除Uri双重进入...
我正在为我的 注册多种类型Container,实现各种接口。
以某种编程方式,我想要一个单元测试来检查所有解析是否成功,这意味着注册中没有循环或丢失的依赖项。
我试图添加这样的东西:
[TestMethod]
public void Resolve_CanResolveAllTypes()
{
foreach (var registration in _container.ComponentRegistry.Registrations)
{
var instance = _container.Resolve(registration.Activator.LimitType);
Assert.IsNotNull(instance);
}
}
Run Code Online (Sandbox Code Playgroud)
但是它在第一次运行时失败了Autofac.Core.Lifetime.LifetimeScope,尽管我有一些方法可以接受ILifetimeScope作为参数并在我的应用程序启动时得到它。
我正在尝试为 MVC5 控制器创建替换 T4 模板。除了一个问题,我一切正常。
我需要为模型中的每个属性生成代码,循环遍历ModelMetadata.Properties实际上非常简单。但是,它不是PropertyInfos的数组。相反,它是一个数组,PropertyMetadata其中似乎没有任何关于属性是否需要或它的类型是否可以为空的信息。因此,您的模型中的属性 typeint和int?两者都显示为 type System.Int32。
此外,无法获得PropertyInfos的列表,因为您无法真正获得Type您正在搭建的模型的Object,因为只有短类型名称会传递给模板。
总结:有没有办法在 T4 模板中知道一个属性是否可以为空?
如何生成程序集限定类型名称?
例如,在配置成员资格提供程序时,我必须在"type"属性中为"SqlMembershipProvider"(在此示例中,我从某处复制以下配置)提供程序集限定类型名称.
如何生成该程序集限定类型名称?是否必须通过检查装配类型每次手动输入?
Run Code Online (Sandbox Code Playgroud)<membership> <providers> <clear /> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer"/> </providers> </membership>
[更新]:更简单的PowerShell版本
PS>([System.String]).AssemblyQualifiedName
System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Run Code Online (Sandbox Code Playgroud) c# ×10
.net ×3
asp.net ×2
gettype ×2
types ×2
asp.net-mvc ×1
autofac ×1
powershell ×1
reflection ×1
settings ×1
string ×1
system.type ×1
t4 ×1
unit-testing ×1
uri ×1
vstest ×1
web-config ×1