代码之家  ›  专栏  ›  技术社区  ›  Alan2

有没有一种方法我可以使用一个方法来添加<string,string>到字典中?

c#
  •  0
  • Alan2  · 技术社区  · 5 年前

    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()}
       });
    
    0 回复  |  直到 5 年前
        1
  •  2
  •   Mike Nakis    5 年前

    不,你不能。

    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() 打电话。

    话虽如此,你的 crasks.TrackError错误() ex ,你也路过 ex.ToString()

    但最重要的是,125个字符的限制是迟钝的,而现在这种限制从来没有任何真正的技术原因。

    如果从技术上讲可以取消这个限制,那么在取消之前不要休息,不管成本是多少。

    如果您使用的产品存在此限制,请扔掉该产品,使用另一个。