Casting C# out parameters?

后端 未结 6 1579
孤城傲影
孤城傲影 2020-12-30 20:35

Is it possible to cast out param arguments in C#? I have:

Dictionary dict;  // but I know all values are strings
string key, value;
         


        
6条回答
  •  时光说笑
    2020-12-30 20:44

    I spy with my little eye an old post that was still active a month ago... Here's what you do:

    public static class DictionaryExtensions
    {
        public static bool TryGetValueAs(this IDictionary dictionary, Key key, out ValueAs valueAs) where ValueAs : Value
        {
            if(dictionary.TryGetValue(key, out Value value))
            {
                valueAs = (ValueAs)value;
                return true;
            }
    
            valueAs = default;
            return false;
        }
    }
    

    And because compilers are great, you can just call it like this:

    dict.TryGetValueAs(key, out bool valueAs); // All generic types are filled in implicitely! :D
    

    But say you're not creating a blackboard AI and just need to call this operation the one time. You can simply do a quicksedoodle inliner like this:

    var valueAs = dict.TryGetValue(key, out var value) ? (bool)value : default;
    

    I know these answers have been given already, but they must be pretty old because there is no cool hip modern inlining going on to condense these methods to the size we really want: no more than 1 line.

提交回复
热议问题