这是我的代码:
namespace BingAdsDataImporter
{
class DeveloperDetails
{
public string ClientId { get; set; }
public string DeveloperToken { get; set; }
}
static class CollInit
{
public static Dictionary<string, DeveloperDetails> details = new Dictionary<string, DeveloperDetails>()
{
{ "Clientnamehere", new DeveloperDetails {ClientId="xxx", DeveloperToken="xxxx"} }
};
public static DeveloperDetails GetValue(string key)
{
if ( details.TryGetValue(key, out DeveloperDetails) ) // fails here Error 1 'BingAdsDataImporter.DeveloperDetails' is a 'type' but is used like a 'variable'
{
return dd;
}
else
{
return null;
}
}
}
}
失败的地方是静态方法GetValue(字符串键)。 我想返回DeveloperDetails对象,或者可能为令牌创建另一个方法,并更改此方法名称以返回密钥。我无法使用out关键字返回对象(虽然我不知道为什么),我无法弄清楚如何从该对象返回特定值,这是首选。任何帮助表示赞赏。
修正了我的新方法
public static DeveloperDetails GetObjectDetails(string key)
{
DeveloperDetails dd = null;
if ( details.TryGetValue(key, out dd) )
{
return dd;
}
else
{
return null;
}
}
public static string GetClientId(string key)
{
DeveloperDetails dd = null;
if (details.TryGetValue(key, out dd))
{
return dd.ClientId;
}
else
{
return null;
}
}
public static string GetDeveloperToken(string key)
{
DeveloperDetails dd = null;
if (details.TryGetValue(key, out dd))
{
return dd.DeveloperToken;
}
else
{
return null;
}
}
答案 0 :(得分:3)
out
关键字需要一个变量来将值放入:
public static DeveloperDetails GetValue(string key)
{
DeveloperDetails dd;
if ( details.TryGetValue(key, out dd) )
{
return dd;
}
else
{
return null;
}
}
由于out
参数将保留null
,如果该值不在字典中,则可以进一步简化为:
public static DeveloperDetails GetValue(string key)
{
DeveloperDetails dd;
details.TryGetValue(key, out dd);
return dd;
}
或者(在我编写的框架的无耻插件中),您可以使用CallMeMaybe
库中的扩展程序:
public static DeveloperDetails GetValue(string key)
{
return details.GetMaybe(key).Else(() => null);
}
如果您要使用最后一种方法,可以考虑完全取消GetValue
方法,并让调用代码利用Maybe<>
类型。例如:
string clientId = details.GetValue(key).ClientId; // could throw null reference
...变成
Maybe<string> clientId = details.GetMaybe(key).Select(d => d.ClientId);
答案 1 :(得分:1)
试试这个:
public static DeveloperDetails GetValue(string key)
{
DeveloperDetails dd = null;
if ( details.TryGetValue(key, out dd) )
{
return dd;
}
else
{
return null;
}
}
您提供的DeveloperDetails是返回类型定义。但是需要传递一个变量名。
答案 2 :(得分:1)
StriplingWarrior的回答是您正在寻找的答案。
但是,如果您只想从developerDetails返回一个值:
public static string GetValue(string key)
{
DeveloperDetails dd;
if ( details.TryGetValue(key, out dd) )
{
return dd.ClientID; //or dd.DeveloperToken
}
else
{
return null;
}
}