小编LWC*_*ris的帖子

如何使用Android数量字符串(复数)?

我试图在参考资料中使用getQuantityString方法来检索基于android开发人员指南的数量字符串(复数)数量字符串(复数)

我得到的错误是

Error:(604) Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?
Error:(604) Found tag </item> where </plurals> is expected
Run Code Online (Sandbox Code Playgroud)

当我设置复数如下

<plurals name="productCount">
    <item quantity="one" formatted="true">%1$d of %2$d product</item>
    <item quantity="other" formatted="true">%1$d of %2$d products</item>
</plurals>
Run Code Online (Sandbox Code Playgroud)

并尝试阅读如下

productIndexCountText.setText(getResources().getQuantityString(R.plurals.productCount, position, size));
Run Code Online (Sandbox Code Playgroud)

一种解决方法是将字符串分解为仅对字符串的最后部分使用复数并连接这两部分.但我试图尽可能避免这样做.

string android plural android-resources

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

如何将ICollection <T>转换为IReadOnlyCollection <T>?

当我ICollection<T>在C#中有一个变量时,我无法将它传递给期望IReadOnlyCollection<T>:

public void Foo()
{
  ICollection<int> data = new List<int>();
  // Bar(data); // Not allowed: Cannot implicitly cast ICollection<int> to IReadOnlyCollection<int>
  Bar(data.ToList()); // Works, since List<T> implements IReadOnlyCollection<T>
}

public void Bar(IReadOnlyCollection<int> data)
{
  if (data.Count == 1) { /* ... */ }
  // ...
}
Run Code Online (Sandbox Code Playgroud)

显然问题是ICollection<T>不继承IReadOnlyCollection<T>- 但为什么?ICollection<T>应该是完整的功能集IReadOnlyCollection<T>以及修改集合的函数.

传递参数的最佳解决方案是什么?

一方面,因为我不想改变集合Bar,只需要计数并迭代集合,我想要一个IReadOnlyCollection.

另一方面,每次调用该函数时,我都不想创建新的列表对象.

c# icollection

11
推荐指数
2
解决办法
2124
查看次数

从控件代码更新 XAML 控件属性值但保持绑定

我编写了一个带有可绑定属性的控件。这种控制也有一个方法来修改属性的值:

public class MyControl : ContentView // WPF: inherited from UserControl
{
  // Xamarin:
  public static readonly BindableProperty MyValueProperty = ...
  // WPF:
  // public static readonly DependencyProperty MyValueProperty = ...

  public int MyValue
  {
     get { return (int) GetValue(MyValueProperty); }
     set { SetValue(MyValueProperty, value); }
  }

  public void Reset()
  {
    MyValue = 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

我在普通 XAML 页面中使用该控件并MyValue通过绑定进行更新:

<local:MyControl x:Name="TheControl"
                 MyValue="{Binding MyValueSource, Mode=OneWay}" />
Run Code Online (Sandbox Code Playgroud)

绑定最初传播从MyValueSource到 的更改MyValue。但是一旦我调用该Reset()方法一次,绑定就会被覆盖,0并且MyValueSource …

c# data-binding xaml

5
推荐指数
1
解决办法
2685
查看次数

如何让 XmlReader 读取 C# 中的属性?

我有一个包含以下 XML 内容的 XML-Stream:

<WebError Key="A">
  <Message>B</Message>
  <Parameters>
    <Parameter name="C">D</Parameter>
  </Parameters>
</WebError>
Run Code Online (Sandbox Code Playgroud)

我找不到XmlReader读取Key属性的方法,所以reader.NodeTypeisXmlNodeType.Attribute和reader.LocalNameis "Key"。

这就是我初始化我的方式XmlReader:

XmlReader.Create(stream, new XmlReaderSettings { CloseInput = true, IgnoreWhitespace = true });
Run Code Online (Sandbox Code Playgroud)

这个读取器然后通过几个方法级别,直到它到达我的解析器函数。

这是我试图让读者阅读该元素的所有替代代码。从代码中剥离了控制结构,因此您只能看到实际调用的函数。

第一次尝试,通过MoveToFirstAttribute()调用移动到属性:

reader.Read(); // true
reader.IsStartElement("WebError"); // true
using (var nodeReader = reader.ReadSubtree()) {
  nodeReader.HasAttributes; // true
  nodeReader.MoveToFirstAttribute(); // false
  nodeReader.Read(); // true
  nodeReader.NodeType; // XmlNodeType.Element
  nodeReader.LocalName; // "WebError"
  using (var subLevelReader = nodeReader.ReadSubtree()) {
  }
  nodeReader.Read(); // …
Run Code Online (Sandbox Code Playgroud)

c# xmlreader xml-attribute

3
推荐指数
1
解决办法
1728
查看次数