C# 类型中的新对象?特别是一个resx文件。我希望在运行时使用不同的resx

C# 类型中的新对象?特别是一个resx文件。我希望在运行时使用不同的resx,c#,resources,resx,activator,system.type,C#,Resources,Resx,Activator,System.type,我试图在一些自动化测试中使用特定于浏览器的resx文件。我被困在我希望实例化类型的地方。谁能给我指出正确的方向吗?我尝试过activator.createInstance等。。。没有运气 public class WebAiiBaseTest : BaseTest { private readonly IDictionary<BrowserType, Type> resxMapper = new Dictionary<BrowserType, Type>{

我试图在一些自动化测试中使用特定于浏览器的resx文件。我被困在我希望实例化类型的地方。谁能给我指出正确的方向吗?我尝试过activator.createInstance等。。。没有运气

 public class WebAiiBaseTest : BaseTest
{
    private readonly IDictionary<BrowserType, Type> resxMapper = new Dictionary<BrowserType, Type>{
                                                                {BrowserType.Chrome, typeof(Chrome)}
                                                                , {BrowserType.Safari, typeof(Safari)}
                                                                , {BrowserType.FireFox, typeof(Firefox)}
                                                                , {BrowserType.InternetExplorer, typeof(InternetExplorer)}
                                                            };



    [TestFixtureSetUp]
    public void FixtureSetup()
    {
        Initialize();
        Launcher.LaunchRepairInformation();

    }

    [TearDown]
    public void TestCleanUp()
    {
        Launcher.NavigateToRepairInformation();
    }

    [TestFixtureTearDown]
    public void FixtureCleanup()
    {
        CleanUp();
    }

    protected object BrowserResx
    {
        get { return Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }

    } 


}
公共类WebAiiBaseTest:BaseTest
{
私有只读IDictionary resxMapper=新字典{
{BrowserType.Chrome,typeof(Chrome)}
,{BrowserType.Safari,typeof(Safari)}
,{BrowserType.FireFox,typeof(FireFox)}
,{BrowserType.InternetExplorer,typeof(InternetExplorer)}
};
[TestFixtureSetUp]
public void FixtureSetup()
{
初始化();
Launcher.LaunchRepairInformation();
}
[撕裂]
公共void TestCleanUp()
{
Launcher.NavigateToRepairInformation();
}
[测试固定器拆卸]
公共void FixtureCleanup()
{
清理();
}
受保护对象浏览器resx
{
获取{return Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]);}
} 
}
此代码返回一个实例,但其类型为object。我想返回一个强类型实例。我尝试过CreateInstance的泛型重载,如下所示

return Activator.CreateInstance<resxMapper[ActiveBrowser.BrowserType]>(); 
返回Activator.CreateInstance();
但是VisualStudio不喜欢这种语法。我做错了什么?谢谢你的提示和建议

干杯,

~ck在圣地亚哥

你的代码拼写不正确,你试过了吗


返回Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType])

我仍然不知道你到底想做什么,但这里是我唯一能想到的事情,我不确定评论线索是否变得更清晰了

public interface IBrowser
{
}
public class Chrome: IBrowser
{
}
... 

protected IBrowser BrowserResx
{
    get { return (IBrowser)Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }

} 
或者:

protected T BrowserResx<T> where T: IBrowser
{
        get { return (T)Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }
}
受保护的T浏览器resx,其中T:IBrowser
{
获取{return(T)Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]);}
}

。。如果您的类被设计为泛型。如果浏览器类型或接口没有基类,则无法返回更强类型的内容:它们只共享“对象”

浏览器类型有基类吗?没有,它是枚举。基于当前值,我想实例化正确类型的resx文件。Activator.CreateInstance(以及您的方法)的返回类型是object,因此如果您不这么认为,则需要将其强制转换为其他类型。也许这个方法应该是泛型的?哦,没关系,@rene说了什么,如果你想返回一个强类型的实例,那么就必须有一个浏览器类型继承的基类,它应该是你的返回类型。否则,您的代码将需要在编译时知道特定类型,并且该方法没有意义。我不知道如何返回BrowserType的实例,我希望根据BrowserType枚举从字典中返回type的实例。是的,当然。请参见第一个实现。它可以工作,但返回类型object。我希望返回一个强类型对象。我怀疑您是否能够实现所需的目标,至少您必须为每种浏览器类型创建一个方法,因为它们将返回不同类型的对象。一种解决方案是不在程序集中嵌入资源,而是使用ResourceManager为不同的浏览器加载不同的资源。看一看