首页 / C# / c# – 错误:可能需要类型注释
c# – 错误:可能需要类型注释
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 错误:可能需要类型注释,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2481字,纯文字阅读大概需要4分钟。
内容图文
![c# – 错误:可能需要类型注释](/upload/InfoBanner/zyjiaocheng/794/b3a15d10132745ae9d08bd4076310f9f.jpg)
我想让Name返回item.name的值,其中item是C#类的一个实例.
fs文件包含
namespace PatternMatch
type PatternMatch() =
member this.X = "F#"
namespace Items_
fsx文件包含
#load "PatternMatch.fs"
open PatternMatch
open Items_
type item = Item
let Name item = item.name //this line throws the error
let rec sentence s item = function
| s when s="Action" -> ""
| s when s="Client" -> ""
| s when s="Classifier" -> ""
| s when s="Container" -> ""
| s when s="ControlFlow" -> ""
| s when s="Gaurd" -> ""
| s when s="Name" -> Name item
| s when s="ObjectFlow" -> ""
| s when s="Source" -> ""
| _ -> ""
让Name item = item.name抛出错误.
Items_是一个C#名称空间,Item是一个C#类.
整个错误是:
Lookup on object of indeterminate type based on information prior to this program point. A type annotation may be needed prior to this program point to constrain the type of the object. This may allow the lookup to be resolved. C:\Users\jzbedocs\Local Files\Visual Studio 2010\Projects\addin\trunk\PatternMatch\Script.fsx 11 17 PatternMatch
解决方法:
让Name item = item.name没有类型注释.除了隐式不支持的成员约束之外,参数项不受约束(请参阅here以使其显式 – 不要这样做……)
看起来您感到困惑,因为参数名称项与类型别名项相同.如果你想明确地这样做,那么这样做:
let Name (itemParameter:item) = itemParameter.name
我没有检查参数是否可以与别名具有相同的名称,但它可能是一个坏主意,因为它可能与类型参数混淆(我们刚看到这个!).
编辑:好的,我查了一下.您可以使参数名称与参数的带注释的类型相同,但它会导致令人困惑的类型签名和实现:
> let Name (item:item) = item.name;;
val Name : item:item -> string // EW!
如果你感觉特别邪恶,你甚至可以这样做:
> let item (item:item) : item = item;;
val item : item:item -> item //Huh?
作为旁白:
let rec sentence s item = function
| s when s="Action" -> ""
| s when s="Client" -> ""
| s when s="Classifier" -> ""
| s when s="Container" -> ""
| s when s="ControlFlow" -> ""
| s when s="Gaurd" -> ""
| s when s="Name" -> Name item
| s when s="ObjectFlow" -> ""
| s when s="Source" -> ""
| _ -> ""
可能更好地表达为:
let rec sentence s item =
match s with
| "Action" -> ""
| "Client" -> ""
| "Classifier" -> ""
| "Container" -> ""
| "ControlFlow" -> ""
| "Gaurd" -> "" //Guard maybe?
| "Name" -> Name item
| "ObjectFlow" -> ""
| "Source" -> ""
| _ -> ""
这是一个使用Item的简单定义的工作示例(使用repl显示):
> type Item() =
member val name = "" with get,set
type item = Item
let Name (itemParameter:item) = itemParameter.name
let test = item();;
test.name <- "test"
Name test;;
val it : string = "test"
内容总结
以上是互联网集市为您收集整理的c# – 错误:可能需要类型注释全部内容,希望文章能够帮你解决c# – 错误:可能需要类型注释所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。