草庐IT

c# - 如何制作只读的 ObservableCollection 属性?

我想在包含对象列表(来自数据库)的View模型上公开一个属性。我需要这个集合是只读的。也就是说,我想阻止添加/删除等。但允许foreach和索引器工作。我的意图是声明一个包含可编辑集合的私有(private)字段,并使用只读公共(public)属性引用它。如下publicObservableCollectionCollectionOfFoo{get{return_CollectionOfFoo;}}但是,该语法只是防止更改对集合的引用。它不会阻止添加/删除等。实现此目标的正确方法是什么? 最佳答案 [先前]接受的答案实际上会在每次访

C# 公共(public)变量在类内可写但在类外只读

我有一个.NetC#类,我需要在其中公开一个变量。我需要在一个方法中(而不是在构造函数中)初始化这个变量。但是,我不希望该变量可以被其他类修改。这可能吗? 最佳答案 不要使用字段-使用属性:classFoo{publicstringBar{get;privateset;}}在此示例中,Foo.Bar在任何地方都是可读的,并且只能由Foo本身的成员写入。附带说明一下,此示例使用了版本3中引入的称为自动实现的属性的C#功能。这是语法糖,编译器会将其转换为具有私有(private)支持字段的常规属性,如下所示:classFoo{[Comp

c# - 为什么 Microsoft 建议不要使用具有可变值的只读字段?

在DesignGuidelinesforDevelopingClassLibraries,微软说:Donotassigninstancesofmutabletypestoread-onlyfields.Theobjectscreatedusingamutabletypecanbemodifiedaftertheyarecreated.Forexample,arraysandmostcollectionsaremutabletypeswhileInt32,Uri,andStringareimmutabletypes.Forfieldsthatholdamutablereferencety

c# - 打开文件只读

目前,这是我打开文件以阅读它的方式:using(TextReaderreader=newStreamReader(Path.Combine(client._WorkLogFileLoc,"dump.txt"))){//dostuff}如何以只读模式打开文件,以便如果另一个进程同时打开该文件,我的程序仍然可以读取它。 最佳答案 典型的问题是其他进程打开文件进行写入。所有标准的File方法和StreamReader构造函数都使用FileShare.Read打开文件。那行不通,拒绝写入共享。您不能拒绝写入,另一个进程是第一个并获得了写入权

C# 匿名类型不能分配给——它是只读的

这个代码片段有什么问题?classProgram{staticvoidMain(string[]args){varobj=new{Name="A",Price=3.003};obj.Name="asdasd";obj.Price=11.00;Console.WriteLine("Name={0}\nPrice={1}",obj.Name,obj.Price);Console.ReadLine();}}我收到以下错误:Error5Propertyorindexer'AnonymousType#1.Name'cannotbeassignedto--itisreadonly.....\CS_

c# - 无法添加服务引用 - 锁定/只读

每当我添加服务引用时,我都会收到错误消息:FailedtoaddServiceReference'Servicereference1.reference'Error:Unabletocheckoutthecurrentfile.Thefilemayberead-onlyorlocked,oryoumayneedtocheckthefileoutmanually.我已经在项目中有一个服务引用,但它以某种方式损坏并给了我一个错误,指出:Couldnotfinddefaultendpointelementthatreferencescontract(servicename)web.confi

C# 和不可变性和只读字段……谎言?

我发现人们声称在一个类中使用所有只读字段并不一定会使该类的实例不可变,因为即使在初始化(构造)之后也有更改只读字段值的“方法”。如何?有什么方法?所以我的问题是什么时候我们才能在C#中真正拥有一个“真正的”不可变对象(immutable对象),我可以在线程中安全地使用它?匿名类型也会创建不可变对象(immutable对象)吗?有人说LINQ在内部使用不可变对象(immutable对象)。究竟如何? 最佳答案 您在其中问了大约五个问题。我会回答第一个:Havingallreadonlyfieldsinaclassdoesnotnece

c# - 如何将组合框设置为只读或用户不能在组合框中写入只能选择给定的项目?

这个问题在这里已经有了答案:HowcanImakeaComboBoxnon-editablein.NET?(7个答案)关闭7年前。我在设置组合属性时遇到问题,只有用户可以从给定的项目中选择值,但我不能在组合框中写入。我如何在C#中执行此操作?

c# - 如何将 WinForms TextBox 的前几个字符设置为只读?

我有一个带有文本框的表单,用于输入URL。我需要将(http://)作为预定义值添加到此文本框,并希望它是只读的,这样用户将无法删除http://,但他可以在它后面写入。如有任何帮助,我们将不胜感激。 最佳答案 这里有几个选项:简单的方法是创建一个label在带有这些字符的文本框外(左侧)。(简单易懂,便于用户理解)创建第二个只读文本框以在开始时使用,设置其样式以匹配输入文本框并将它们彼此相邻对齐。是的,你会得到一条像素线来将它们分开,但我认为这会增加用户体验,让人们明白这不是为了搞乱(我个人会选择这个选项)如果您需要样式,可以ro

c# - List<T> 只读,带有私有(private)集

我怎样才能公开List以便它是只读的,但可以私下设置?这行不通:publicListmyList{readonlyget;privateset;}即使你这样做:publicListmyList{get;privateset;}您仍然可以这样做:myList.Add("TEST");//Thisshouldnotbeallowed我想你可以:publicListmyList{get{returnotherList;}}privateListotherList{get;set;} 最佳答案 我认为你在混淆概念。publicListmyL