有没有一种方法可以使用将<string,string>添加到字典的方法?

时间:2019-12-15 09:52:53

标签: c# .net

我有以下代码可跟踪应用程序中的错误:

Crashes.TrackError(ex,
   new Dictionary<string, string> {
        {"RunQuery", "Exception"},
        {"sql", s },
        {"Device Model", DeviceInfo.Model },
        {"Exception", ex.ToString()}
   });

现在我发现参数长度限制为125个字符。有没有一种方法可以代替添加:{"sql", s },而我可以将其分解为最大长度为125的倍数?

我需要的东西等同于:

Crashes.TrackError(ex,
   new Dictionary<string, string> {
        {"RunQuery", "Exception"},
        {"sql", s1 },
        {"sql", s2 },
        {"sql", s3 },
        {"Device Model", DeviceInfo.Model },
        {"Exception", ex.ToString()}
   });

这是通过方法调用生成的:

        {"sql", s1 },
        {"sql", s2 },
        {"sql", s3 },

赞:

Crashes.TrackError(ex,
   new Dictionary<string, string> {
        {"RunQuery", "Exception"},
        myMethod("sql", s),
        {"Device Model", DeviceInfo.Model },
        {"Exception", ex.ToString()}
   });

1 个答案:

答案 0 :(得分:2)

不,你不能。

但是您可以执行以下操作:

Crashes.TrackError(ex, DictionaryOfStringFromErrorInfo( s, DeviceInfo, ex ) );

然后您可以拥有这个:

IDictionary<string,string> DictionaryOfStringFromErrorInfo( string s,
    DeviceInfo deviceInfo, Exception ex )
{
    Dictionary<string,string> dictionary = new Dictionary<string, string>();
    dictionary.Add( "RunQuery", "Exception" );
    List<string> parts = s.ConvertToChunkList(125);
    dictionary.Add( "Device Model", DeviceInfo.Model );
    dictionary.Add( "Exception", ex.ToString() );
    for( int i = 0;  i < parts.Count;  i++ )
        dictionary.Add( "Sql" + i, parts[i] );
    return dictionary;
}

您甚至可以将Crashes传递给该函数,以便它也可以进行Crashes.TrackError()调用。

话虽如此,您的Crashes.TrackError()接受ex,并且您还传递了ex.ToString(),所以看起来很多余。

但是最重要的是,限制了125个字符的限制,而如今,从没有任何真正的技术理由可以实现这种限制。

如果从技术上讲消除此限制是可行的,那么无论花费多少,都不要休息,直到您将其删除。

如果您使用的某个产品有此限制,请扔掉该产品,然后再使用另一个。

如果您组织中的某些工程师“只是因为”将此限制放在适当的位置,请使其看起来像是发生了事故。