【问题标题】:A more elegant way to change a single element in a struct in C#在 C# 中更改结构中单个元素的更优雅的方法
【发布时间】:2013-05-11 23:16:31
【问题描述】:

是否有更优雅的方法来更改 Xamarin/C# 中 View.Frame 结构中的单个元素,而不使用以下模式之一?

var frame = View.Frame;
frame.Y = 123;
View.Frame = frame;

View.Frame = new RectangleF(View.Frame.X, 123, View.Frame.Width, View.Frame.Height);

只需像这样更改元素:View.Frame.Y = 123; 没有任何效果。只有在重新分配整个 Frame 结构后,它才会生效。

【问题讨论】:

  • 它可能没有任何效果,因为View.Frame 可能是一个属性。当您访问它时,它会返回 Frame 的 copy,因为它是一个值类型。我个人更喜欢你的第一种风格;关于您在哪些方面正在发生变化的意图似乎更加明确。 (更不用说它避免命中 Frame 属性吸气剂 3 次)

标签: c# xamarin


【解决方案1】:

我花了几分钟试图想出一些东西,但是因为 Frame 是一个结构,所以看起来没有更优雅的方法:

MonoTouch: How to change control's location at runtime?

您可以做的一件事是创建一个可以重用的静态实用程序类:

public static class FrameUtil{
     public RectangleF UpdateX(RectangleF frame, float newX){
          var tempFrame = frame;
          tempFrame.x = newX;
          return tempFrame;
     }
}

【讨论】:

  • View.Frame = new RectangleF(View.Frame.X, 123, View.Frame.Width, View.Frame.Height); 现在是:View.Frame = FrameHelper.X(View.Frame, 123); 这好一点。我已经开始使用它了。谢谢。
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多