Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
372 views
in Technique[技术] by (71.8m points)

c# - Cannot implicitly convert type 'void' to 'System.Collections.Generic.Dictionary<string,bool>

This code works fine

Dictionary<string, bool> test = new Dictionary<string, bool>();
        test.Add("test string", true);

The following code throws this error : Cannot implicitly convert type 'void' to 'System.Collections.Generic.Dictionary

Dictionary<string, bool> test = new Dictionary<string, bool>().Add("test string", true);

why? what is the difference?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The return type of .Add is void

If you are chaining calls, the last expression becomes the return value of the whole statement.

The return value of new Dictionary<K, V>() is Dictionary<K, V>, then you call .Add on it and .Add returns nothing (void)

You can use object initialiser syntax to do this inline:

Dictionary<string, bool> test = new Dictionary<string, bool> 
{ 
    { "test string", true } 
};

Edit: more info, a lot of fluent syntax style frameworks will return the object you called the method on to allow you to chain:

e.g.

public class SomeFluentThing 
{
   public SomeFluentThing DoSomething()
   {
       // Do stuff
       return this;
   }

   public SomeFluentThing DoSomethingElse()
   {
       // Do stuff
       return this;
   }

}

So you can chain naturally:

SomeFluentThingVariable.DoSomething().DoSomethingElse();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...