是否可以轻松动态地装饰对象?
例如,假设我有一个List<PointF>.这个列表实际上是正弦函数的图.我想通过这些观点为每个PointF添加一个标志,告知它是否为峰值.
但我不想创建一个新的扩展SpecialPointF或其他什么,它有一个布尔属性.
判断我想要懒惰的一切,但懒惰是多么出色的想法诞生(也是坏主意)
编辑:我会接受拳击解决方案以及你可以提出的任何有趣的黑客.没有什么可以阻止我的衍生.我只是想知道是否有更有趣的方式.
不,没有办法(具体地)你所要求的.
假设您正在使用C#3.0+,您可以使用匿名类型来执行此操作,假设您不希望在函数之外公开信息.
var decoratedList = sourceList.Select(pt => new
{
IsPeak = GetIsPeak(pt),
Point = pt
}).ToList();
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个新List<T>对象.这很可能无法解决您的问题,因为您无法在单个函数调用之外扩展它,并且您正在创建新列表而不是修改现有列表,但希望这会有所帮助.
如果有一种方法可以计算每个点,则不需要向其添加标志,您可以使用扩展方法而无需扩展它。
\n类似于 PointF.isPeak();
\n它的工作原理类似于:
\npublic static class Extensions\n{\n public static bool isPeak (this PointF p)\n {\n do crazy math...\n\n return result;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n瞧\xc3\xa0,你在 PointF 类中进行了计算。
\n顺便说一句,公共静态类必须位于最外层范围,不能嵌套。
\n| 归档时间: |
|
| 查看次数: |
3021 次 |
| 最近记录: |