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
128 views
in Technique[技术] by (71.8m points)

c# - Dynamic parameter causes compiler to think method return is dynamic

If I have a dynamic parameter the compiler seems to ditch the return type and think it's dynamic.

For example:

public MethodResult IsValid(object userLogin)
{     
  return new MethodResult();
}

You would think that:

var isValidResult = IsValid(someObject());

Should read as

dynamic -> MethodResult 

But it thinks that it is:

dynamic -> dynamic

Does adding a dynamic parameter to the signature completely stop the compiler from knowing what the return should be despite the return being strongly typed?

See Question&Answers more detail:os

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

1 Reply

0 votes
by (71.8m points)

Yes, dynamic stops the compiler from knowing the type on any parameters, properties, or method return types. Add an explicit cast like:

(MethodResult)IsValid(someObject));

The reason here is that once you enter the dynamic world in C# you are going into late binding. The compiler can't verify this code because it can no longer use any static type analysis. So it defers until later. You can help overcome this by providing static casts as a guide for the compiler.


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

...