Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类将其自身的实例放置在类中的静态列表中_C#_Static - Fatal编程技术网

C# 类将其自身的实例放置在类中的静态列表中

C# 类将其自身的实例放置在类中的静态列表中,c#,static,C#,Static,这是将实例存储在任何类都可以访问的列表中的常见方法。有没有更好的方法来实现这一点 class fish { string species = "Gold Fish"; int age = 1; public static list<fish> Listholder = new list<fish>(); Listholder.add(this); } 类鱼 { string species=“金鱼”; 智力年龄=1; 公共静态列表Listholder=新列表(

这是将实例存储在任何类都可以访问的列表中的常见方法。有没有更好的方法来实现这一点

class fish
{

string species = "Gold Fish";

int age = 1;

public static list<fish> Listholder = new list<fish>();

Listholder.add(this);

}
类鱼
{
string species=“金鱼”;
智力年龄=1;
公共静态列表Listholder=新列表();
添加(本);
}

我想你想找到的是一种在某处存储全球可访问鱼类列表的方法。也就是说,要有一个鱼类的中央仓库,所有其他类都可以从中获取鱼类


如果是这样的话,还有其他方法,比如服务/。请记住,拥有一个可变的公共静态字段将使测试和重用变得更加困难。

类具有属性

该类允许您创建对象

class fish()
{
    Private String _Type;
    Private Int _Age;
    Private String _Species;

    Public Type
    {
        get _Type;
        set _Type = Value;
    }
    Public Age
    {
        get _Age;
        set _Age = Value;
    }
    Public Species
    {
        get _Species;
        set _Species = Value;
    }
    public new(string Type, Int Age, String Species)
    {
        this.Type = Type;
        this.Age = Age;
        this.Species = Species;
    }
}

//this is your new object.
Fish SunFish = New Fish("small", 9, "Sunfish");
创建对象后,可以创建对象列表

列表
不是线程安全的,因此如果要从不同线程添加/删除fish,则应改用

例如:

public class Fish
{
    public string Species { get; set; }
    public int Age { get; set; }

    private static System.Collections.Concurrent.ConcurrentBag<Fish> Aquarium = new System.Collections.Concurrent.ConcurrentBag<Fish>();

    static Fish()
    {
        var goldFish = new Fish { Age = 1, Species = "Gold Fish" };
        PutFishIntoAquarium(goldFish);
    }

    public static void PutFishIntoAquarium(Fish fish)
    {
        Aquarium.Add(fish);
    }

    public static void ClearAquarium()
    {
        Fish someFish;
        while (!Aquarium.IsEmpty)
        {
            TryTakeFishOutOfAquarium(out someFish);
        }
    }

    public static bool TryTakeFishOutOfAquarium(out Fish fish)
    {
        if (Aquarium.TryTake(out fish))
            return true;
        return false;
    }

    public static bool TryLookAtSomeFish(out Fish fish)
    {
        if (Aquarium.TryPeek(out fish))
            return true;
        return false;
    }

}
公共级鱼类
{
公共字符串种类{get;set;}
公共整数{get;set;}
private static System.Collections.Concurrent.ConcurrentBag水族馆=新系统.Collections.ConcurrentBag();
静态鱼()
{
var goldFish=新鱼{Age=1,Species=“goldFish”};
Putfishinto水族馆(金鱼);
}
公共静态鱼缸(鱼类)
{
水族馆。添加(鱼);
}
公共静态真空透明水族馆()
{
鱼是鱼;
而(!水族馆,我是空的)
{
trytakefishoutofquarium(取出一些鱼);
}
}
公共静态bool trytakefishoutofquarium(out Fish)
{
如果(水族馆,试食(鱼))
返回true;
返回false;
}
公共静态bool TryLookAtSomeFish(室外鱼)
{
if(水族馆锥鱼(外出鱼类))
返回true;
返回false;
}
}

list
如果你指的是BCL,那么必须是
list
,而根据MS编码标准,
fish
应该是
fish
。你有一堆鱼,任何类都可以访问,这本身就是一个巨大的危险信号,听起来不适合我。这些鱼具体是什么?为什么每个人都需要访问它?为了澄清,请更新问题,描述您希望其他类如何使用
ListHolder
。除了其他人指出的关于姓名的内容外,请注意您的
列表持有者
不是列表持有者,而是列表本身
fishes
fishList
是更好的名称。+1到@Servy-只是因为你的评论很搞笑!布莱恩:我想这只是你问题的一个简单例子,因为你的类中甚至没有任何构造函数、方法等。你的想法应该行得通——不过,关于它有多普遍。。。也许如果你解释一下你想做什么,我们可以提供一些“最佳实践”的替代方案。这是一个例子,我正在使用一个系统,每个国家的上校和队长都有自己的静态列表。可以被unity中的特定游戏对象访问。我的目标是不违反封装规则,但有时遵循这些规则会影响游戏的性能。OP不希望创建任意的
列表
,他希望有一个新的
Fish
自动添加到列表中。我认为OP需要创建一个不同的功能来将
Fish
船长添加到列表中,并且列表需要是一组预先制作的对象。比如说,当游戏中的某个人达到某个级别时,他需要游戏/应用程序创建一个新的
fish/captain
,并将其添加到列表中。这需要一个不同的过程,或者当其他团队成员完成游戏的一些重要部分时,会执行类似的过程。感谢您的建议,其他团队成员可能需要知道,此类课程和
船长/鱼类
列表可供他们使用。您可能应该立即设置这些内容,并向他们提供他们的
in/out
场景;设置我写自己的代码已经有一段时间了,现在我正在修复别人的代码已经有一段时间了。