Nunit: рдЕрдиреБрд░реЛрдз: PropertyConstraint рдореЗрдВ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдЬреВрди 2017  ┬╖  46рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: nunit/nunit

рдлрд┐рд▓рд╣рд╛рд▓ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдгреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдПрдХ рдРрд╕рд╛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдРрд╕рд╛ рдХреБрдЫ рджрд┐рдЦрддрд╛ рд╣реИ:

```рд╕реА#
[рдЯреЗрд╕реНрдЯрдлрд┐рдХреНрдЪрд░]
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдЯреЗрд╕реНрдЯрдХреНрд▓рд╛рд╕
{
рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг
{
рдирд┐рдЬреА рд╢рдмреНрджрдХреЛрд╢рд╢рдмреНрджрдХреЛрд╢ = рдирдпрд╛ рд╢рдмреНрджрдХреЛрд╢();

  public string this[string key]
  {
    get { return dictionary[key]; }
    set { dictionary[key] = value; }
  }
}

[Test]
public void Test()
{
  var obj = new Example
  {
    ["TEST1"] = "1",
    ["TEST2"] = "2",
  };

  Assert.That(obj, Has.Property("Item", "TEST1").EqualTo("1").And.Property("Item", "TEST2").EqualTo("2"));
}

}
```

done help wanted enhancement normal

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдФрд░ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╡реЗрддрди рдЧреНрд░реЗрдб рдХреА рдмрд╛рдд рд╣реИ, рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ NUnit рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрднрдЧ $0 рдХрд╛ рд╡рд╛рд░реНрд╖рд┐рдХ рд╡реЗрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рдорд╛рди рд╡реЗрддрди рдЧреНрд░реЗрдб рдкрд░ рд╣реИрдВ

рд╕рднреА 46 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛ред

рд╕реА # рдирд╛рдорд┐рдд рдЕрдиреБрдХреНрд░рдорд┐рдд рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡реАрдмреАрдПрдирдИрдЯреА рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ .Property("Name", index1, ...) рдирд╛рдорд┐рдд рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдХрд░рдХреЗ рд╕реА # рднрд╛рд╖рд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЖрдк Has.Item("TEST1").EqualTo("1") рдпрд╛ Has.Index("TEST1").EqualTo("1") рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

@jnm2
рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд░реВрдк рдореЗрдВ "рдЖрдЗрдЯрдо" рдпрд╛ "рдЗрдВрдбреЗрдХреНрд╕рд░" рд╡рд┐рдзрд┐ рдХрд╛ рд╣реЛрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реА # рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ: https://stackoverflow.com/questions/5110403/class-with-indexer-and-property-named -рдЖрдЗрдЯрдо

@ Ch0senOne рдирд╛рдо рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рд╕реА # рдореЗрдВ рдПрдХ рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рджреЛ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рди рд╣реА рдЖрдк рд╕реА # рд╕реЗ рдирд╛рдо рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░ рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ Has.Item("value") Contains.Item рд╕рд╛рде рдмрд╣реБрдд рднреНрд░рдорд┐рдд рд╣реЛрдЧрд╛ред рддреЛ рд╢рд╛рдпрдж Has.Index("value") ?

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ Has.Index("IndexValue") рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЗ рд▓рд┐рдП рдФрд░ Has.Property("PropertyName", indexParams) рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ indexers рдХреЗ рд▓рд┐рдПред Has.Property рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛, рднрд▓реЗ рд╣реА рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╕реА # рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Has.Index рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдпрд╛ рдЕрдЧрд░ рд╣рдо рдкреНрдпрд╛рд░рд╛ рдмрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо Has.Index["IndexValue"] рдФрд░
Has.Property("PropertyName")[indexparams] ...

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рд╕рд╛рде рднрд╛рдЧ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ Has.Item["AtIndex"] рдХреНрд░рдо рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕рд░ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП Contains.Item("ItemValue") ... рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рд╣реИ рдХрд┐ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ!


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдиреНрдп @ рдиреВрдирд┐рдЯ/рдлреНрд░реЗрдорд╡рд░реНрдХ-рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВред

рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмрдЬрд╛рдп рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд╢рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдкрд░ рдмреЗрд╣рддрд░ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдлреЛрди рдкрд░ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдЗрд╢реНрдпреВ рдирдВрдмрд░ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ред

@CharliePoole https://github.com/nunit/nunit/issues/26?

рдпрд╣ Has.Property рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╣рдо рдХрд░ рд╕рдХрддреЗ рдереЗ:

  • Has.Property(_ => _.PropertyName[index1, ...])
  • Has.Property(_ => _.PropertyName, index1, ...)

рдореБрдЭреЗ рдЕрдм рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ Has.Property рддрдм рддрдХ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧреБрдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ, рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ Has.Index(value1, ...) рдпрд╛ Has.Index[value1, ...] рдпрд╛ Has.Item[value1, ...] рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ред

рд╡рд╣реА рд╣реИ рд╡реЛред рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдирд╛рдорд┐рдд рдЕрдиреБрдХреНрд░рдордгрдХреЛрдВ рдкрд░ рд╕рд╣рдордд рд╣реВрдВ, рдЬрд┐рдирдХрд╛ рд╡реИрд╕реЗ рднреА рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@ jnm2 рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдмрд╣реБ-рдХреБрдВрдЬреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

this[string key1, string key2]

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ, рдпрд╛ рдРрд╕реЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ IEnumerable рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ KeyNotFoundException рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрдВрдбреЗрдХреНрд╕рд░ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдФрд░ рдХреБрдЫ рднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ?

@ рдХреНрд░рд╢83 рд╣рд╛рдВ, рдореЗрд░рд╛ index1, ... рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕ рдкрд░ рд╣рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреБрдВрдЬреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рдРрд╕реА рд╡рд╕реНрддреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдпрд╛ рдХреБрдВрдЬреА рд╕рдВрдЧреНрд░рд╣ рд╣реИред рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рд╡рд╛рд▓реА рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбрд┐рдлреЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рд╡рд╛рд▓реА рд╕рднреА рдЪреАрдЬреЛрдВ рдореЗрдВ рдЪрд╛рдмрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред (рдЪреВрдВрдХрд┐ рдЖрдк рдЗрд╕ рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╣рдорд╛рд░рд╛ Contains.Key рд╕рд┐рдВрдЯреИрдХреНрд╕ рдорджрджрдЧрд╛рд░ рд▓рдЧреЗ? рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ?)

рдЖрдк рдпрд╣рд╛рдВ рдЬреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рд╣рдореЗрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдЪрд╛рд╣рд┐рдПред рд╡рд╣рд╛рдВ рдХреБрдЫ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рдкрд╕рдВрджреАрджрд╛ Has.Item(params object[] indexerArgs) рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЪрд╛рд╣реЗ рдЙрд╕рдХрд╛ рдирд╛рдо рдХреБрдЫ рднреА рд╣реЛред
рдХреНрдпрд╛ рдпрд╣ рд╕рдм рдХреБрдЫ рдЕрдм рддрдХ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

+1

@ nunit/рдврд╛рдВрдЪрд╛-рдЯреАрдо рдХреНрдпрд╛ рдЖрдк рдирд┐рдореНрди рдирдП API рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗ?

namespace NUnit.Framework
{
    public abstract class Has
    {
        public static ResolvableConstraintExpression Property(string name);

+       public static ResolvableConstraintExpression Item(params object[] indexerArgs);
    }
}

namespace NUnit.Framework.Constraints
{
    public class ConstraintExpression
    {
        public ResolvableConstraintExpression Property(string name);

+       public ResolvableConstraintExpression Item(params object[] indexerArgs);
    }
}

рдореИрдВ рд╢рд╛рдпрдж IndexerConstraint рдХрдХреНрд╖рд╛ рдХреЛ рддрдм рддрдХ рдЖрдВрддрд░рд┐рдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рди рд╣реЛред

рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдФрд░ рд╡реЛрдЯ, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрдВрд╕реЛрд▓ рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддрд╛ рдерд╛ред ЁЯЩВ

@jnm2 рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЯреАрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рддреНрд╡рд░рд┐рдд squiz рдерд╛ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╕рдорд░реНрдерд┐рдд рдПрдкреАрдЖрдИ рдЬреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП - рдХреНрдпрд╛ рдпрд╣ рд╣реИ:

/// obj from the initial post example
Assert.That(obj, Has.Item("TEST1").EqualTo(1).And.Item("TEST2").EqualTo(2));

рдпрд╛ рдпрд╣ рд╣реИ:

Assert.That(obj, Has.Item("TEST1", 1).And.Item("TEST2", 2));

?

рдЖрдк рдЙрджрд╛рд╣рд░рдг params object[] рд▓реЗрддреЗ рд╣реИрдВ

рдСрдкреНрдЯ рдорд╛рдирддреЗ рд╣реБрдПред 2, рдХреНрдпрд╛ рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреИрд╕реЗ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реЛ, рджрд╛рд╡рд╛ рдХрд░реЗрдВ рдХрд┐ рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реИ, 2 рдкреИрд░рд╛рдореАрдЯрд░ - рдХреБрдВрдЬреА рдФрд░ рдорд╛рди? рдЕрдиреНрдп рд╕рдВрдпреЛрдЬрди (рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░), рд╡рд┐рдлрд▓?

@Poimen рд╣рд╛рдБ, рдФрд░ рд╣рдо рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗ!

рд╕рд░рдгреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХ рд▓реЗ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

public string this[int x] => "First indexer";

public string this[string x] => "Second indexer";

public string this[int x, int y] => "Third indexer";

рдЖрдк Has.Item(42).EqualTo("First indexer") , Has.Item("42").EqualTo("Second indexer") , рдФрд░ Has.Item(1, 2).EqualTo("Third indexer") ред

рджреЗрдЦрд┐рдП, рдЖрдк рд╣рд░ рджрд┐рди рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрддреЗ рд╣реИрдВ - рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рдерд╛, рдЙрдлрд╝: рджреЗрдЦреЗрдВ_рдиреЛ_рдПрд╡рд┐рд▓: рдореБрдЭреЗ рдкрд╣рд▓реЗ рдорд▓реНрдЯреА-рдХреА рдЗрдВрдбреЗрдХреНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЖрдирдВрдж рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ ...

рдареАрдХ рд╣реИ, рдмрдврд╝рд┐рдпрд╛, рдореИрдВ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреБрдЫ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдБрдЧреАред

@ jnm2 рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рдПрдХ рдЪрд┐рдВрддрд╛ рд╣реИ рд╡рд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИ рдЬреЛ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддрд╛ рд╣реИ:

Has.Item(42)

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдереЛрдбрд╝рд╛ "рд╣реИрдХреА" рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдл рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред "рд╣реИрдХ" рд╣реИ:
https://github.com/nunit/nunit/pull/3609/commits/96154ca6402c692cec5e0ae6947f9922e72799fe#diff -ceeee4b8399633f181b6bccd5a39eb32R72

@Poimen рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрджреЗрд╢ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдХреНрдпрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? рдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ?

@ jnm2 рдкреНрд░рдХрдЯ

  Expected: indexer [System.Int32]
  But was:  "not found"

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдмрдирддреЗ рд╣реИрдВ StringifyArguments рдлрд╝рдВрдХреНрд╢рди рдереЛрдбрд╝рд╛ "рд╣реИрдХреА" рд╣реИред

рддреЛ рдореЗрд░рд╛ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрдХреНрдд рдкреНрд░рд╢реНрди рдЕрдзрд┐рдХ рд╣реИ рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдХреНрд▓реАрдирд░ рддрд░реАрдХрд╛ рдерд╛ред

@ jnm2 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рдореАрдХреНрд╖рд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж)ред рд▓реЗрдмрд▓ рдХрд╣рддрд╛ рд╣реИ awaiting:contributor ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдЫ рдФрд░ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдореИрдВ "рд╣реЛ рдЧрдпрд╛": +1:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм Has.Property рдХреЛ рдХреЛрдИ рдкреНрд░реЙрдкрд░реНрдЯреА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрд╕ рд╕рдВрджреЗрд╢ рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рд╣рдореЗрдВ property рдХреЛ default indexer рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдХреЛ accepting arguments [42] рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдУрд░ рдЭреБрдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рддрд░реНрдХ рдорд╛рди рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП MsgUtils.FormatCollection рдЬреИрд╕реЗ рдореМрдЬреВрджрд╛ рд╕реНрд╡рд░реВрдкрдг рд╕рд╣рд╛рдпрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдирд╣реАрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! рдкреАрдЖрд░ рдереНрд░реЗрдб рдореЗрдВ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЖрджрд░реНрд╢ рд╣реЛрдЧреАред

рджрд╛рд╡реЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:
```рд╕реА#
Assert.that (рдкрд░реАрдХреНрд╖рдХ, Has.Item ("рд╡рд╛рд╣"));


It producers the message:

рдЕрдкреЗрдХреНрд╖рд┐рдд: рдбрд┐рдлреЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ <>
рд▓реЗрдХрд┐рди рдерд╛: "рдирд╣реАрдВ рдорд┐рд▓рд╛"


Given the assertion:
```c#
Assert.That(tester, Has.Item("wow").EqualTo(1));

рдпрд╣ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░реЛрдбреНрдпреВрд╕ рдХрд░рддрд╛ рд╣реИ:

Default indexer accepting arguments < "wow" > was not found on NUnit.Framework.Constraints.IndexerConstraintTests+NamedIndexTester.

рдпрд╣ MsgUtils.FormatCollection рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реБрдЖред

рддреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдкрддреНрддрд┐ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рднреА рдЕрдзрд┐рдХ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдЕрд░реНрдердкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддрд░реНрдХ рдорд╛рдиреЛрдВ рдХреЗ рдмрдЬрд╛рдп рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рддрд░реНрдХ рдорд╛рди рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдорд╛рди рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╢реНрд░реЗрдгреА рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рднреНрд░рд╛рдордХ рд╣реИ рдХрд┐ System.String рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ IEnumerable<char> рддрд░реНрдХ рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

IEnumerable<char> рдПрдХ рдирд┐рд░рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдпрд╣ рдмрд╛рдд рд╕рдордЭ рдореЗрдВ рдЖ рдЧрдИ рд╣реИред

рддреЛ, рд╡рд╛рдкрд╕ - рджрд┐рдпрд╛ рдЧрдпрд╛:
```рд╕реА#
Assert.that (рдкрд░реАрдХреНрд╖рдХ, Has.Item ("рд╡рд╛рд╣"));


producers the message:

рдЕрдкреЗрдХреНрд╖рд┐рдд: рдбрд┐рдлреЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ < "рд╡рд╛рд╣" >
рд▓реЗрдХрд┐рди рдерд╛: "рдирд╣реАрдВ рдорд┐рд▓рд╛"


For numbers it goes into the usual suffix - given:
```c#
Assert.That(tester, Has.Item(42d));

рдирд┐рд░реНрдорд╛рддрд╛:

  Expected: Default indexer accepting arguments < 42.0d >
  But was:  "not found"

'рдЕрдкреЗрдХреНрд╖рд┐рдд' рд╕рдВрджреЗрд╢ рдореБрдЭреЗ рддрдм рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред But was: "not found" рд╕рдВрджреЗрд╢ рдереЛрдбрд╝рд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ not found , рд▓реЗрдХрд┐рди рдЕрдЧрд░ PropertyConstraint рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╡рд╣реА рд░рдЦрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрди рдмрджрд▓рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреАрдЖрд░ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рд╣рдо рдЕрднреА рднреА рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВрдиреЗ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЯреАрдо рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдмрджрд▓рд╛рд╡ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рд╣реИред

рд╣рд╛рдБ, рдореИрдВ рдЗрд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реЛрдЧрд╛:

But was: not found

рд▓реЗрдХрд┐рди ConstraintResult рдХреА рд╡рд╛рдкрд╕реА рд╡рд╣рд╛рдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛрдЯреНрд╕ рдбрд╛рд▓ рд░рд╣реА рд╣реИред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг:
```рд╕реА#
Assert.that (рдкрд░реАрдХреНрд╖рдХ, Has.Property ("NoItDoesNotHaveThis"));

produces:

рдЕрдкреЗрдХреНрд╖рд┐рдд: рд╕рдВрдкрддреНрддрд┐ NoItDoesNotHaveThis
рдордЧрд░ рдерд╛:
```
рддреЛ рдХреЛрдИ рдЙрджреНрдзрд░рдг рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ - рдорд╛рди рдирд╣реАрдВред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ ConstraintResult рдХрд╛ рдЕрдзрд┐рднрд╛рд░ рд▓реМрдЯрд╛рдирд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП PropertyConstraint рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред actual рдорд╛рди рдХреНрдпрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджрд┐рдЦрд╛рдирд╛ рд╕рдмрд╕реЗ рдмреБрд░реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдЬрдм рд╕рдВрджреЗрд╢ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЬреЛ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╡рд╣ рд╕рдВрдкрддреНрддрд┐ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ред

ConstraintResult рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд▓реМрдЯрд╛рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдмрд╛рдзрд╛рдПрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреА рд╣реИрдВ, рд╣рд╛рдВред

рдареАрдХ рд╣реИ, рдмрдврд╝рд┐рдпрд╛ - рд▓рдЧрддрд╛ рд╣реИ - рджрд┐рдпрд╛ рдЧрдпрд╛:
```рд╕реА#
рдЬреЛрд░ рджреЗрдВред рд╡рд╣ (рдкрд░реАрдХреНрд╖рдХ, рд╣реИред рдЖрдЗрдЯрдо (42 рдбреА));


producers:

рдЕрдкреЗрдХреНрд╖рд┐рдд: рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ < 42.0d >
рдордЧрд░ рдерд╛:
```

рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдмрд╛рдзрд╛ рд╕рдВрджреЗрд╢ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

@ nunit/рдврд╛рдВрдЪреЗ-рдЯреАрдо рдФрд░ рд╕рднреА, рдореИрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдкрд░ рд╢реАрдШреНрд░ рд╕рдорд╛рдзрд╛рди рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ @Poimen рдХрд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдкреАрдЖрд░ (https://github.com/nunit/nunit/pull/3609) рдЕрдиреНрдпрдерд╛ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

@Dreamescaper рдиреЗ рдореЗрд░реЗ рдзреНрдпрд╛рди рдореЗрдВ рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдКрдкрд░ рд▓рд╛рдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЯреНрд░реИрдХ рдЦреЛ рджрд┐рдпрд╛: рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рд▓реЛрдЧ Assert.That(collection, Has.Item("x")); рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдкрдврд╝реЗрдВрдЧреЗ рдпрд╣ рд╕реЛрдЪрдХрд░ рдХрд┐ Has.Item рдЕрд░реНрде Contains.Item .
рд╣рдо рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрджреЗрд╢ рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ Has.Item рдкрдврд╝рддреЗ рд╕рдордп рдЗрд╕реЗ рдареАрдХ рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА:

  Expected: Default indexer accepting arguments < 42.0d > (Did you mean to use Contains.Item?)

рджреВрд╕рд░реА рдУрд░, рдореБрдЭреЗ Has.Index(42) рдпрд╛ Has.Index(42).EqualTo(43) рд╣реИ рдЬреЛ рдореИрдВрдиреЗ Item рдмрдЬрд╛рдп рд╕реБрдЭрд╛рдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рд╣реИред рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИ рдФрд░ рдпрд╣ рдЗрдВрдбреЗрдХреНрд╕ 43 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЗрдВрдбреЗрдХреНрд╕ рд╡рд╣ рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, 42ред

рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк

  • Has.Item рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝рддреЗ рд╕рдордп рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдиреНрдпреВрдиреАрдХрд░рдг рдЬреЛрдбрд╝реЗрдВ, рдЬреИрд╕реЗ XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдпреБрдХреНрддрд┐рдпрд╛рдБред
  • рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рдЕрдЬреАрдм рдорд┐рд╢реНрд░рдг рдХреЗ рдмрд╛рд╡рдЬреВрдж Has.Index рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред
  • рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Has.ItemAt рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред Has.ItemAt(42).EqualTo(43) ред

рд░реБрдХреЛ, рдореБрдЭреЗ рдЖрдЦрд┐рд░реА рд╕реБрдЭрд╛рд╡ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ LINQ ElementAt рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЖрдЗрдЯрдо рджреЗрддрд╛ рд╣реИред

рдХреНрдпрд╛ рд╣рд░ рдХреЛрдИ Has.ItemAt рдЦреБрд╢ рд╣реИ? рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдореИрдВ рдЙрд╕ рд╕рдордп рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ @Poimen рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕рдорд░реНрдкрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред

Has.ItemAt рд▓рд┐рдП +1 :)

рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ Has.Item рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдореБрдЭреЗ Has.ItemAt рдкрд╕рдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЖрдкрдХреЛ LINQ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП Has.ElementAt рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?

рдореИрдВ ElementAt рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Dictionary<string,string> LINQ рдХрд╛ ElementAt(0) рдкрд╣рд▓реА рдЬреЛрдбрд╝реА рд▓реМрдЯрд╛рдПрдЧрд╛, рдФрд░ Has.ItemTo(0).EqualTo("...") рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред

@CharliePoole рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЦреЛрдЬрдирд╛ рдЙрддрдирд╛ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореБрдЭреЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ Item рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЧреНрд░рд╣/рд╢рдмреНрджрдХреЛрд╢/рд▓реБрдХрдЕрдк рдкрд░ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рдЬрдмрдХрд┐ ElementAt рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдЕрдиреНрдп рдЧрдгрдирд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реИрдВ . рд╕рдВрдЧреНрд░рд╣ рддрддреНрд╡реЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЖрдЗрдЯрдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

@Dreamescaper рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Has.ItemAt(4) рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдкрд░ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ ElementAt рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЧрдгрдирд╛?

@jnm2
рдпрд╣ рд╢рд╛рдпрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдкрддрд╛ (рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА Has.Item рд╕реЗ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ)ред

@ jnm2 рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБред рдпрд╣ рдореБрджреНрджрд╛ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рдФрд░ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рд╢реАрд░реНрд╖рдХ рд╣реИред Has.Property рдФрд░ Has.ItemAt рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдирдЬрд╝рд░ рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдпрд╛ рдмрд╛рддрдЪреАрдд рдпрд╛ рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗ?

[рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЧреБрдгреЛрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рдкрд░ рд╕рдордХрдХреНрд╖ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╕реНрддрд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдорддреМрд░ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред :рд╕реНрдорд╛рдЗрд▓рд┐рдВрдЧ_рдЗрдореНрдк: ]

рдПрдХ рдПрдирдпреВрдиреАрдЯ 4.0 рдЪреАрдЬ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдкреАрдЖрдИ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рд╛рдл рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред рд╢рдмреНрдж "рд╕рджрд╕реНрдп" рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ "рдЖрдЗрдЯрдо" рдХреЗ рд╕рдорддреБрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╕рдВрдкрддреНрддрд┐, рд╡рд┐рдзрд┐ рдпрд╛ рдЪрд░ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ ItemAt рд╕реЗ рдЕрдзрд┐рдХ ElementAt рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо Enumerable.ElementAt рдХреЗ рд╕рдорд╛рди рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕реМрдВрдкрддреЗ рд╣реИрдВ рдпрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдЬрд┐рд╕ рдЪреАрдЬ рдиреЗ рдореБрдЭреЗ ElementAt(int index) рд╕рд╛рде рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмреАрд╕реАрдПрд▓ рдореЗрдВ At рдкреНрд░рддреНрдпрдп рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ index рдирд╛рдордХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ ILookup рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ ILookup рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдПрдХрд╛рдзрд┐рдХ TElements рд▓реМрдЯрд╛рддреА рд╣реИ, рдПрдХ рднреА рддрддреНрд╡/рд╡рд╕реНрддреБ рдирд╣реАрдВред Has.EntryAt рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдЧреНрд░рд╣, рд╢рдмреНрджрдХреЛрд╢ рдФрд░ рдмрд╣реБ-рддрддреНрд╡-рдкреНрд░рддрд┐-рд╕реВрдЪрдХрд╛рдВрдХ рд▓реБрдХрдЕрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ Has.ItemAt рдЬреЛ рдПрдХ ILookup рд╕реЗ IEnumerable<TElement> рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛

рдЖрдк рд╕рдм рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдпрд╣ рдХрдард┐рди рд╣реИ рдЬрдм рдЖрдк рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдмрд╣реБрдордд рд╡рд░реАрдпрддрд╛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдирд╛рдо рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред @ рдиреВрдирд┐рдЯ/рдлреНрд░реЗрдорд╡рд░реНрдХ-рдЯреАрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓реЛрдЧ, рдореЗрд░рд╛ рдорддрд▓рдм рдЖрдкрдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдирд╣реАрдВ рдерд╛ред рдпрджрд┐ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдордЬрдмреВрдд рднрд╛рд╡рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рд╣рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИ!

@CharliePoole Has.Property("X") рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ X рдирд╛рдордХ рдПрдХ рдЧреИрд░-рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рд╕рдВрдкрддреНрддрд┐ рд╣реИред Has.ItemAt("X") рдпрд╣ рджрд╛рд╡рд╛ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ (рдПрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ, рдкреНрд░рд╕рд┐рджреНрдз рдирд╛рдо рд╡рд╛рд▓рд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рдЧреБрдг) рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

Has.Property("X").EqualTo(3) рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдПрдХ рдЧреИрд░ рдкреИрд░рд╛рдорд┐рдЯреНрд░реАрдХреГрдд рд╕рдВрдкрддреНрддрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ X рдХрд┐ рд░рд┐рдЯрд░реНрди 3 рдЕрдЧрд░ рддреБрдо рдлреЛрди рдЕрдкрдиреЗ рдЧреИрд░ рдкреИрд░рд╛рдорд┐рдЯреНрд░реАрдХреГрдд get рдПрдХреНрд╕реЗрд╕рд░ред Has.ItemAt("X").EqualTo(3) рдпрд╣ рджрд╛рд╡рд╛ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ (рдПрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ, рдкреНрд░рд╕рд┐рджреНрдз рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рд╕рдВрдкрддреНрддрд┐) рд╣реИ рдЬреЛ 3 рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ "X" рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ get рдПрдХреНрд╕реЗрд╕рд░ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХрд╛ рдирд╛рдо рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдХрд┐ рд╕реА #, рд╡реАрдмреА рдФрд░ рдПрдл # рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рднреА рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдЗрд╕ рдкреНрд░рдХрд╛рд░ 'рдбрд┐рдлреЙрд▓реНрдЯ' рд╢рдмреНрдж) рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдЬрд┐рд╕рдореЗрдВ рдбрд┐рдлреЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреА рдХреЛрдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдирд╛рдорд┐рдд рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдереА, рдЙрд╕реЗ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХрд╛ рдирд╛рдо рдЖрдорддреМрд░ рдкрд░ Item , рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЛ рдХреБрдЫ рдордирдорд╛рдирд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рднрд╛рд╖рд╛рдПрдВ рдЕрднреА рднреА рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреАред C# рдореЗрдВ, рдЖрдк рдЗрд╕реЗ [IndexerName("ArbitraryName")] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗред

@ jnm2 рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмреАрдЪ рднреНрд░рдо рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ

  • __рдмреАрдЗрдВрдЧ__ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ
  • __рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ__ рдПрдХ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╣реИ
  • __рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ__ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЬрд┐рд╕рдореЗрдВ рдЖрдЗрдЯрдо рд╣реИрдВ

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ __you__ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдореИрдВ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рддреЗ рд╕рдордп рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░реВрдВрдЧрд╛ (рдИрд╢реНрд╡рд░реАрдп рд╡рд┐рдзрд┐, y' рдкрддрд╛ рд╣реИ: рдкрд▓рдХ:) рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрдИ рдЗрд╕реЗ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдордЭрд╛рдПрдВрдЧреЗред рдХрд╛рдлреАред

рдореИрдВ рдЬреЛрдбрд╝ рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рднреЗрджреЛрдВ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреБрдирд╢реНрдЪ: рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмрд╣рд┐рд╖реНрдХреГрдд рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реБрдЖред :рд╕реНрдорд╛рдЗрд▓реА:

@CharliePoole рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ред рдХреНрдпрд╛ рд╣рдо рдЙрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рддрдм рддрдХ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдо рдХрд┐рд╕реА рдирд╛рдо рдкрд░ рд╕рдордЭреМрддрд╛ рдирд╣реАрдВ рдХрд░ рд▓реЗрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Has.ItemAt / Has.ElementAt / Has.EntryAt /etc рдХреЗ рдмреАрдЪ рдХреЗ рдЪреБрдирд╛рд╡ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛? рдпрд╛ рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рдмрд┐рдВрджреБ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЪреВрдХ рдЧрдпрд╛ рдФрд░ рдЖрдк рднреНрд░рдо рдХреА рдЗрд╕ рдХреНрд╖рдорддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд╛рдордХрд░рдг рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдЕрдм рддрдХ рдореИрдВ ItemAt рдХреА рдУрд░ рдЭреБрдХ рд░рд╣рд╛ рд╣реВрдВред @Dreamescaper , рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рд╡рд╣реАрдВ рд╣реИрдВ? @CharliePoole рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЖрдк ElementAt рд▓рд┐рдП рд╡рд░реАрдпрддрд╛ рд╡реНрдпрдХреНрдд рдХрд░ рд░рд╣реЗ рдереЗ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЛрдЪрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд░рд╣реЗ рдереЗред

рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рд▓реЛрдЧ Has.ItemAt / Has.ElementAt / Has.EntryAt /other рдкрд░ рдЭрдВрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдкрд╛рдПрдВрдЧреЗред рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЕрдЧрд▓реЗ рджрд┐рди рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж рд▓реАрдб рдореЗрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣рдо рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЗрддрдиреА рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рд╕реЗ 3.13 рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВрдЧреЗред

@jnm2 рдмрд╕ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рд╕реЛрдЪрдиреЗ рдФрд░ рдЗрд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╢рдмреНрджреЛрдВ рдХрд╛ рдЪрдпрди WRT, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрдж рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪреАрдмрджреНрдз рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рднреА рдХрд┐ рдХреНрдпрд╛ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрдпреЛрдЬрди рд╣реИред рдореИрдВрдиреЗ рдЬрд┐рди рддреАрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЙрдирдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛

  • Has.ItemAt("foo").EqualTo("bar")
  • `Has.Property("Bing").with.ItemAt("foo").EqualTo("bar")
  • `Has.Property("Bing").with.One.EqualTo("bar")

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрд╛рдВрдХрди рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛

рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдХреНрд░рдордг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рдзрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд╡реЗрддрди-рдЧреНрд░реЗрдб рд╕реЗ рдКрдкрд░ рд╣реИ: рдореБрд╕реНрдХрд╛рди:, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдЭрдВрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ ...

рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ ItemAt ред

рдореИрдВрдиреЗ рд╕рдордп рдмрд┐рддрд╛рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ @CharliePoole рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░ред рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдХрд┐ ElementAt рдХрд╛ рдЙрдкрдпреЛрдЧ IEnumerable рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рднрд╛рд╖рд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗрд╡рд▓ IEnumerable рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП ElementAt рдмрд╛рдбрд╝ рдкрд░ рдмреИрдард╛, рдлрд┐рд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛:
```рд╕реА#
рдЬреЛрд░ рджреЗрдВред рд╡рд╣ (..., Has.ElementAt ("рдПрдХ", "рджреЛ"));

against:
```c#
Assert.That(..., Has.ItemAt("one", "two"));

рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ ItemAt рдПрдХрд╛рдзрд┐рдХ рдореВрд▓реНрдп рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдпрд╣ рднреА рдорд╛рдирд╛ рдХрд┐ рдЯрд┐рдХрдЯ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рдХреЗ рд▓рд┐рдП рдерд╛ рдФрд░ ItemAt рдЙрд╕ рдХрдерд╛ рдХреЗ рд╕рд╛рде рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЗрд╕реЗ рдХреБрдЫ рдФрд░/рдмреЗрд╣рддрд░/рдЖрджрд┐ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ)ред

рдореБрдЭреЗ рднреА рдкрд╕рдВрдж рд╣реИ ItemAt , рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдмрд╣реБрдордд рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╢рд╛рд╕рди рдХрд░рддреЗ рд╣реИрдВ

рднреНрд░рдо рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

@Poimen Re: рдЖрдкрдХрд╛ рд╡реЗрддрди рдЧреНрд░реЗрдб, рдЗрд╕ рдмрд╛рдд рдХреЛ рдХрдо рдордд рд╕рдордЭреЛ рдХрд┐ рд╣рдо рдпрд╣рд╛рдБ рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдФрд░ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╡реЗрддрди рдЧреНрд░реЗрдб рдХреА рдмрд╛рдд рд╣реИ, рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ NUnit рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрднрдЧ $0 рдХрд╛ рд╡рд╛рд░реНрд╖рд┐рдХ рд╡реЗрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рдорд╛рди рд╡реЗрддрди рдЧреНрд░реЗрдб рдкрд░ рд╣реИрдВ

@Dreamescaper рдиреЗ рдкреАрдЖрд░ рдореЗрдВ рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ред рд╕рдХрд╛рд░рд╛рддреНрдордХ рдпрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ, рдпрд╣ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЧрд┐рдирддреА рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛:

Assert.That(new[] { 1, 2, 2 }, Has.ItemAt(3));
Assert.That(new[] { 1, 2, 2 }, Has.No.ItemAt(3));

рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рди рд╣реЛ, рддрдм рддрдХ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдмрд╛рдзрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЗрдВрдбреЗрдХреНрд╕рд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП Has.Indexer(typeof(Type1), typeof(Type2), ...) рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдФрд░ Has.ItemAt(arg1, arg2, ...) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕рд░ рдЪрд▓рд╛рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреАрдЬреЛрдВ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рд╢реБрд░реВ рдореЗрдВ Has.ItemAt(3) рдХреЛ рдПрдХ рдмрд╛рдзрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдФрд░ Has.ItemAt(3).EqualTo(4) рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд┐рдкрд┐рдВрдЧ рдХрд░рдиреЗ рдкрд░ рдЖрдкрддреНрддрд┐ рд╣реЛрдЧреА?

Has.Indexer рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдиреНрдп рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП Has.Indexer<T>() , Has.Indexer<T1, T2>() рдЖрджрд┐ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗред

рдлреАрдбрдмреИрдХ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ Has.ItemAt(...) рдХреЛ рдЕрдм рд╕реНрд╡-рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рджрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ Has.Indexer рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/nunit/nunit/issues/3690 рджрд╛рдпрд░ рдХрд┐рдпрд╛ред Has.Indexer рдЙрд╕ рдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Aarskin picture Aarskin  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Prodigio picture Prodigio  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

JackUkleja picture JackUkleja  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ffMathy picture ffMathy  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fluffynuts picture fluffynuts  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ