假设你有一个Person Person: public class Person { public string Name { get; set;} public IEnumerable<Role> Roles {get; set;} } 我显然应该在构造函数中实例化angular色。 现在,我曾经这样做过一个列表: public Person() { Roles = new List<Role>(); } 但是我在System.Linq命名空间中发现了这个静态方法 IEnumerable<T> Enumerable.Empty<T>(); 来自MSDN : Empty(TResult)()方法cachingTResulttypes的空序列。 当它返回的对象被枚举时,它不会产生任何元素。 在某些情况下,此方法对于将空序列传递给采用IEnumerable(T)的用户定义方法很有用。 它也可以用来为Union等方法生成一个中性元素。 有关此用法的示例,请参阅示例部分 那么写这样的构造函数会更好吗? 你用它吗? 为什么? 或者如果没有,为什么不呢? public Person() { Roles = Enumerable.Empty<Role>(); }
有一个使用默认参数的类构造函数是好的做法,还是应该使用单独的重载构造函数? 例如: // Use this… class foo { private: std::string name_; unsigned int age_; public: foo(const std::string& name = "", const unsigned int age = 0) : name_(name), age_(age) { … } }; // Or this? class foo { private: std::string name_; unsigned int age_; public: foo() : name_(""), age_(0) { } foo(const std::string& name, […]
我想从我的渲染视图重构下面的代码: <Button href="#" active={!this.state.singleJourney} onClick={this.handleButtonChange.bind(this,false)} >Retour</Button> 到绑定在构造函数中的版本。 原因是渲染视图中的绑定会给我带来性能问题,特别是在低端手机上。 我已经创build了下面的代码,但是我经常得到以下错误(大量)。 它看起来像应用程序进入一个循环: Warning: setState(…): Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to `componentWillMount`. 以下是我使用的代码: var React = require('react'); var […]
无论如何检测一个JavaScript对象是否是一个正则expression式? 例如,我想要做这样的事情: var t = /^foo(bar)?$/i; alert(typeof t); //I want this to return "regexp" 这可能吗? 谢谢! 编辑:感谢所有的答案。 看来我有两个很好的select: obj.constructor.name === "RegExp" 要么 obj instanceof RegExp 任何方法的主要优点/缺点? 再次感谢!
我有一个结构,我希望它有一些合理的默认值初始化。 通常情况下,这里要做的事情是使用构造函数,但是由于go在传统意义上并不是真正的OOP,所以它们不是真正的对象,也没有构造函数。 我注意到init方法,但是在包级别。 是否还有其他类似的结构级别可以使用? 如果不是Go的这种types的东西被接受的最佳做法?
假设您有一个名为Customer的类,其中包含以下字段: 用户名 电子邮件 名字 姓 我们还要说,根据您的业务逻辑,所有Customer对象都必须定义这四个属性。 现在,我们可以通过强制构造函数指定每个属性来轻松完成此操作。 但是当你被迫向Customer对象添加更多必需的字段时,很容易看出这会如何失控。 我已经看到有20多个参数被引入构造函数的类,使用它们只是一个痛苦。 但是,或者,如果您不需要这些字段,那么如果您依赖调用代码来指定这些属性,则可能会遇到未定义信息的风险,或者更糟糕的是,会导致对象引用错误。 有没有其他的select,或者你只是要决定X的构造函数参数太多,你可以住?
我惊讶地意外地发现以下的作品: #include <iostream> int main(int argc, char** argv) { struct Foo { Foo(Foo& bar) { std::cout << &bar << std::endl; } }; Foo foo(foo); // I can't believe this works… std::cout << &foo << std::endl; // but it does… } 我将构造对象的地址传递给它自己的构造函数。 这看起来像来源层面的循环定义。 标准是否真的允许你在对象构造之前将一个对象传入一个函数,或者这个未定义的行为? 我想这并不奇怪,因为所有的类成员函数都有一个指向其类实例的数据的指针,作为一个隐式参数。 数据成员的布局在编译时是固定的。 请注意,我不是问这是否有用或好主意, 我只是在学习更多的课程。
我只是在我们的生产环境中有一个相当不愉快的经历,导致OutOfMemoryErrors: heapspace.. 我追溯到我的使用函数中ArrayList::new的问题。 为了validation这实际上是通过一个声明的构造函数( t -> new ArrayList<>() )执行比正常创build更差,我写了下面的小方法: public class TestMain { public static void main(String[] args) { boolean newMethod = false; Map<Integer,List<Integer>> map = new HashMap<>(); int index = 0; while(true){ if (newMethod) { map.computeIfAbsent(index, ArrayList::new).add(index); } else { map.computeIfAbsent(index, i->new ArrayList<>()).add(index); } if (index++ % 100 == 0) { System.out.println("Reached index "+index); […]
可能重复: Python中有多个构造函数的干净,pythonic方法是什么? 是不是可以在Python中定义多个构造函数,具有不同的签名? 如果不是,绕过它的一般方法是什么? 例如,假设您想定义一个类City 我希望能够说someCity = City()或someCity = City("Berlin") ,其中第一个只是默认的名称值,第二个定义它。
我有一个类与2个构造函数: public class Lens { public Lens(string parameter1) { //blabla } public Lens(string parameter1, string parameter2) { // want to call constructor with 1 param here.. } } 我想调用第二个构造函数。 这在C#中可能吗?