C# 在c中强制转换对象引用#

C# 在c中强制转换对象引用#,c#,object,casting,ref,C#,Object,Casting,Ref,如果我有一个引用对象的函数。如何强制转换参数以避免类型不匹配 Dictionary<string, string> mySettings = new Dictionary<string, string>(); . . saveSettings(ref mySettings); . . void saveSettings(ref object) { } Dictionary mySettings=new Dictionary(); . . 保存设置(参考mySetting

如果我有一个引用对象的函数。如何强制转换参数以避免类型不匹配

Dictionary<string, string> mySettings = new Dictionary<string, string>();
.
.
saveSettings(ref mySettings);
.
.
void saveSettings(ref object)
{
}
Dictionary mySettings=new Dictionary();
.
.
保存设置(参考mySettings);
.
.
无效保存设置(参照对象)
{
}
调用saveSettings会导致以下错误消息:

无法从“ref Dictionary”转换为“ref object”

我不是在寻找解决方法,我已经这样做了,我想知道这种直接方法是否可行。

这样做:

var objectMySettings = mySettings as object;
if (objectMySettings != null)
    saveSettings(ref objectMySettings);
 protected void Button1_Click(object sender, EventArgs e)
{
    Dictionary<string, string> mySettings = new Dictionary<string, string>();

    saveSettings(mySettings);
}

void saveSettings( Dictionary<string, string> Settings)
{
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
Dictionary mySettings=新字典();
保存设置(mySettings);
}
无效保存设置(字典设置)
{
}
saveSettings的定义格式不正确。“ref object”后面需要一个标识符。但我会将“ref对象”改为字典。

类似这样的内容:

static void Main()
{

   Dictionary<string, string> mySettings = new Dictionary<string, string>();
   object o = mySettings;
   SaveSettings(ref o);
   // o now has an item.
}

static void SaveSettings(ref object o)
{
    var d = o as Dictionary<string, string>;
    d.Add("Some", "String");
}
static void Main()
{
Dictionary mySettings=新字典();
对象o=mySettings;
保存设置(参考o);
//o现在有一个项目。
}
静态无效保存设置(参照对象o)
{
var d=o作为字典;
d、 添加(“一些”、“字符串”);
}
编辑一些调试输出。

如果保存设置采用多种类型,为什么不改用通用类型?如果他们共享一个公共接口

void saveSettings<T>(T obj);
无效保存设置(T obj);

为什么
saveSettings()
要引用对象?你想达到什么目标?我相信,一旦您能够澄清,就会有更好的解决方案。void saveSettings(ref object theObject)将是一种更正。将参数重新定义为特定类型将限制函数。但这是我目前的解决办法。也许你应该像另一张海报一样使用通用的。请参阅我对HelloWorld的评论。您的解决方案不会更新mySettings,这正是我需要它做的。但是谢谢,是的,迈克。将它应用到我的代码中,我没有,我必须对此进行调查。谢谢你的解决方案。谢谢,我试试看。如果我传递两个参数,第一个参数是文件名(字符串),只有第二个参数需要指定为泛型,该怎么办?它的语法是什么?void saveSettings(字符串文件名,T obj)泛型解决方案是一个很好的建议。因为这解决了我的具体问题,所以我选择它作为首选答案。我必须说,这种方式对mySettings对象的引用不会传递给objectMySettings,所以如果在saveSettings方法中对objectMySettings赋值为null,mySettings对象仍将有值,它不会为null,因此真正的引用行为将丢失
void saveSettings<T>(T obj);