相关疑难解决方法(0)

API java 5及更多:我应该返回数组还是Collection?

本着最佳实践的精神:总是返回一个____,从来没有____,我在即将从JDK1.4.2迁移到JDK5等等时遇到了类似的问题.(是的,我知道,JDK1.4.2是EOL! ;-)).

对于返回集合的函数(不是简单的属性集合),我总是更喜欢(在JDK1.4.2中)返回一个Array而不是一个通用的List,因为:

  • 它强制执行返回类型(MyObject[]而不是对象列表,更多类型安全的静态 - 如'编译' - 级别)
  • 它为返回的集合建议了一个"只读"字符(将一个元素添加到集合中会更复杂,即使这不像c#中的'只读'关键字那样严格).这与说"不可变"不同,因为数组中的引用仍然可以修改...

当然,我总是创建这个返回的数组(我没有公开任何'内部'数组)

现在,在JDK5及更多版本中,List<MyObject>如果我愿意,我可以使用它.

选择返回MyObject[]而不是List或Collection<MyObject>在java5中编码时有什么好理由?

如果Collection<MyObject>使用奖金,可以:

  • 对返回的集合强制执行只读属性?(没有add()remove()可能)
  • 对返回的集合强制执行不可变的方面?(甚至不能修改该集合的引用)

PS:JavaGenericFAQ没有那个.

java arrays generics api collections

31
推荐指数
2
解决办法
5936
查看次数

.NET中是否可以使用不可变数组?

有可能以某种方式将a标记System.Array为不可变.当置于public-get/private-set之后,它们无法添加,因为它需要重新分配和重新分配,但消费者仍然可以设置他们希望的任何下标:

public class Immy
{
    public string[] { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

我认为readonly关键字可能会成功,但没有这样的运气.

.net c# arrays immutability

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

如何以及何时放弃在C#中使用数组?

我总是被告知在数组中添加元素的方式如下:

创建数组+ 1element的空副本,然后将原始数组中的数据复制到其中,然后加载新元素的新数据

如果这是真的,那么由于内存和CPU利用率的原因,在需要大量元素活动的场景中使用数组是正确的,对吗?

如果是这种情况,你是否应该尽量避免在添加大量元素时尽可能多地使用数组?你应该使用iStringMap吗?如果是这样,如果您需要两个以上的维度并且需要添加大量元素添加,会发生什么.你刚刚受到性能打击还是应该使用其他东西?

.net c# theory arrays

25
推荐指数
3
解决办法
2万
查看次数

"字段初始值设定项不能引用非静态字段"在C#中意味着什么?

我不明白C#中的这个错误

错误CS0236:字段初始值设定项无法引用非静态字段,方法或属性'Prv.DB.getUserName(long)'

对于以下代码

public class MyDictionary<K, V>
{
    public delegate V NonExistentKey(K k);
    NonExistentKey nonExistentKey;

    public MyDictionary(NonExistentKey nonExistentKey_) { }
}

class DB
{
    SQLiteConnection connection;
    SQLiteCommand command;

    MyDictionary<long, string> usernameDict = new MyDictionary<long, string>(getUserName);

    string getUserName(long userId) { }
}
Run Code Online (Sandbox Code Playgroud)

c# delegates

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

标签 统计

arrays ×3

c# ×3

.net ×2

api ×1

collections ×1

delegates ×1

generics ×1

immutability ×1

java ×1

theory ×1