English 中文(简体)
准则操作者为什么会把无效格式的例外放在空闲价值上?
原标题:Why do the nullable explicit cast LINQ operators throw invalid format exceptions on empty values?

首先,我知道可以简单地回答这个问题,即空洞不是无效的。 此外,我只是在今年早些时候通过另一个排他性的问题发现了投放者,没有这方面的经验。 即便如此,如果这些投放者与无证销售商合并,其原因并不完全是这些投放者,而是作为处理诸如准则中缺失内容或属性等错误条件的一种合法解决办法。 我开始使用和ScottGu,以此防止以简明和半立法的方式出现无效/误用数据。 从我能够收集的来看,这似乎是首先把所有投放的超负荷放入分子线的动机之一。

因此,考虑到处理缺失价值的情况,与处理空洞问题不同的是,在相关条款中,这种做法被认为是处理这种局势的良好途径。

设想:

int length = (int?)elem.Attribute("Length") ?? 0;

如果“Length属性”缺失,那么就会产生什么无效价值? 运营商收益0;

如果存在@Length属性,但空洞的是内部投放的工业单位,并扔下一种形式例外。 当然,出于我的用意,我希望它不会,而且只会使我完全放弃,因此,我可以继续在我已经多少含蓄的LINQ法典中使用这种做法。

归根结底,我不会提出解决办法,而是更希望听到我是否采取了我所忽视的明显做法,或者如果有人对如何处理缺失的价值设想有好的看法,而没有空洞的价值情景。

<><>Edit>/strong>

看来,我应努力强调以下几点:

  • 相关文章来自我敬佩并寻求指导的管理人员。 这些条款似乎提出(或至少呼吁注意)一种处理任择价值观的改进/替代做法。

  • 在我的情况下,选择性的数值有时以missingsinglements or characteristics为形式出现,但则以oney<>s/em>s 内容或价值观的形式出现。

  • 所述办法对缺失的价值观是预期的,但对于空洞的价值观却失败。

  • 遵循上述做法的法典似乎在防止缺乏任择价值,但事实上是脆弱的,在特定情况下是中断的。 事实上,当你再次冒着与我有关的风险时,就会出现保护。

  • 这一点可以强调,如果目标要素存在,但空洞,这两个关联的例子都与一个临时例外没有结果。

  • 最后,如果你已签订合同(可能通过纸浆厂),确保内容或特性never<>/strong>,那么所描述的办法似乎起很大作用。 这种做法是空的,但在不存在合同的情况下,这种做法无效,需要一名候补人员。

最佳回答

我同意这一行为;如果我don t have a “id” mandatee / elements,那么我很高兴将这种说法算作无效,但如果存在,则有“t parse,那是不同的——而且是一种空洞的工程。 您必须手工操作,或可以在<代码>上添加一种推广方法。 缩略语

public static int? ParseInt32(this XAttribute attrib) {
    if(attrib != null && string.IsNullOrEmpty(attrib.Value)) return null;
    return (int?)attrib;
}

注Im将内部投放为,而“t>int则简单易懂,.Parse 将是Datetime等的一个坏例子,其中使用Xml的不同格式,这些格式由内部投放。

问题回答

就着手工作而言,我已经制定了以下推广方法。 我对马克所描述的方法没有思考,该方法将问题固定下来,并且仍然使用? 指定违约的经营者。 是否具有创造力并允许X? 将继续使用Y型号。

I think in the end I probably prefer Marc s approach because it keeps a consistent pattern in my assignment statements and doesn t introduce the syntactical confusion that the TryParseInt call had as it appeared too much like you were parsing -1 or whatever default/fallback value was supplied.

    elem.Attribute("ID").TryParseInt(-1)

    /// <summary>
    /// Parses an attribute to extract an In32 value and falls back to the defaultValue should parsing fail
    /// </summary>
    /// <param name="defaultValue">The value to use should Int32.TryParse fail</param>
    /// <returns>The parsed or default integer value</returns>
    public static int TryParseInt(this XAttribute attr, int defaultValue)
    {
        int result;
        if (!Int32.TryParse((string)attr, out result))
        {
            // When parsing fails, use the fallback value
            result = defaultValue;
        }

        return result;
    }




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...