相关疑难解决方法(0)

结构体实现接口是否安全?

我似乎记得读过一些关于结构通过C#在CLR中实现接口有什么不好的东西,但我似乎无法找到任何关于它的东西.这不好吗?这样做会产生意想不到的后果吗?

public interface Foo { Bar GetBar(); }
public struct Fubar : Foo { public Bar GetBar() { return new Bar(); } }
Run Code Online (Sandbox Code Playgroud)

c# struct interface

84
推荐指数
3
解决办法
5万
查看次数

如何从List <T>获取Span <T>,同时避免不必要的副本?

我有List<T>一些包含一些数据.我想把它传递给一个接受的函数ReadOnlySpan<T>.

List<T> items = GetListOfItems();
// ...
void Consume<T>(ReadOnlySpan<T> buffer)
// ...
Consume(items??);
Run Code Online (Sandbox Code Playgroud)

在这个特定的例子中,T是,byte但它并不重要.

我知道我可以.ToArray()在List上使用,并构造一个span,例如

Consume(new ReadOnlySpan<T>(items.ToArray()));
Run Code Online (Sandbox Code Playgroud)

然而,这会创建(看似)不必要的项目副本.有没有办法直接从列表中获取Span?List<T>是在T[]幕后实施的,所以从理论上来说这是可能的,但在实践中并没有我能看到的那么多?

c# memory

11
推荐指数
2
解决办法
690
查看次数

在C#中更新List中结构的属性

我有一个List<Cat>地方Catstruct有一个ID和一个名称.

如何更改ID为7的猫的名称?

我做了(没想到)

var myCat = catList.Single(c => c.Id == 7);

mycat.Name = "Dr Fluffykins";
Run Code Online (Sandbox Code Playgroud)

但当然,结构是价值类型.那么是否可以使用这样的技术,或者我是否必须更改.Singlefor循环并存储索引以使用更新的结构替换它?

c# struct

5
推荐指数
1
解决办法
166
查看次数

C# 列表中的结构体

关于结构的简单问题...我有一个结构,让我们假装它看起来像这样:

struct myStruct {
     public int x, y;
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个包含该结构的列表

List<myStruct> myList = new List<myStruct>;
Run Code Online (Sandbox Code Playgroud)

然后我循环遍历列表,我想更改 x 的值......

for(int i=0; i<myList.Count; i++) {

     ...//do stuff to x

     myList[i].x = newX;
}
Run Code Online (Sandbox Code Playgroud)

无法修改 'List<myform.myStruct>.this[int]' 的返回值,因为它不是变量

您能否澄清我对于为什么它不允许我更改 x 值的任何困惑。

c# struct

2
推荐指数
1
解决办法
4万
查看次数

无法修改IList对象的成员

我创建了一个IList变量如下:

IList<vertex> matrix = new List<vertex> ();
Run Code Online (Sandbox Code Playgroud)

这里,顶点是我定义的一个结构,其中一个成员被访问(布尔).

但是,当我尝试通过遍历列表来修改此成员时,如下所示:

matrix[j].visited = false;
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误,说"无法修改返回值,因为它不是变量".知道为什么吗?

c# ilist

0
推荐指数
1
解决办法
1242
查看次数

标签 统计

c# ×5

struct ×3

ilist ×1

interface ×1

memory ×1