Открытое свойство C # с параметрами [duplicate]

Здесь вы идете, 3 способа сделать, Самый короткий для скуки:

db.student.find({}, 'roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}).select('roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}, {'roll' : 1 , '_id' : 1 ); // <---- Old lengthy boring way

Чтобы удалить определенное поле, используйте -:

db.student.find({}).select('roll -_id') // <--- Will remove id from result
5
задан nawfal 7 June 2014 в 16:33
поделиться

4 ответа

В зависимости от того, что вы действительно ищете, это может быть уже сделано для вас. Если вы пытаетесь использовать индексатор в коллекции Bars, это уже сделано для вас ::

Foo myFoo = new Foo();
Bar myBar = myFood.Bars[1];

Или если вы пытаетесь получить следующие функции:

Foo myFoo = new Foo();
Bar myBar = myFoo[1];

Затем:

public Bar this[int index]
{
    get { return Bars[index]; }
}
2
ответ дан Justin Niessner 26 August 2018 в 08:37
поделиться

Вы можете использовать явно реализованные интерфейсы, как показано здесь: Именованное индексированное свойство в C #? (см. второй способ, показанный в этом ответе)

1
ответ дан Community 26 August 2018 в 08:37
поделиться
public class NamedIndexProp
{
    private MainClass _Owner;
    public NamedIndexProp(MainClass Owner) { _Owner = Owner;
    public DataType this[IndexType ndx]
    {
        get { return _Owner.Getter(ndx); }
        set { _Owner.Setter(ndx, value); }
    }
}
public MainClass
{
    private NamedIndexProp _PropName;
    public MainClass()
    {
       _PropName = new NamedIndexProp(this);
    }
    public NamedIndexProp PropName { get { return _PropName; } }
    internal DataType getter(IndexType ndx)
    {
        return ...
    }
    internal void Setter(IndexType ndx, DataType value)
    {
       ... = value;
    }
}
0
ответ дан Doug 26 August 2018 в 08:37
поделиться

Нет - вы не можете писать именованные индекеры в C #. Начиная с C # 4, вы можете использовать их для COM-объектов, но вы не можете их записать.

Как вы уже заметили, foo.Bars[index] будет делать то, что вы хотите, в любом случае ... этот ответ был в основном для будущих читателей.

Чтобы разработать: подвергая свойство Bars некоторого типа, у которого есть индекс, достигается то, что вы хотите, но вы должны рассмотреть, как его разоблачить:

  • Вы хотите, чтобы вызывающие абоненты могли заменить коллекцию другой коллекцией? (Если нет, сделайте это свойство только для чтения.)
  • Вы хотите, чтобы вызывающие абоненты могли изменять коллекцию? Если да, то как? Просто заменять элементы или добавлять / удалять их? Вам нужен какой-то контроль над этим? Ответы на эти вопросы будут определять тип, который вы хотите открыть, - потенциально доступная только для чтения коллекция или пользовательская коллекция с дополнительной проверкой.
8
ответ дан Jon Skeet 26 August 2018 в 08:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: