我有一个继承自a的类List<MagicBean>
.除了一个:当我添加[DebuggerDisplay]
属性时,它在所有方面都运行良好且符合预期.即使看着List有它[DebuggerDisplay("Count = {Count}")]
,如果我将它复制并粘贴到我的身上,我也无法直接查看我所有的MagicBeans而无需在调试时钻入base-> private成员.
我如何充分利用这两个世界?IE:值列中的自定义值,Visual Studio没有隐藏我的魔豆?
c# debugging visual-studio-2008-sp1 visual-studio-2008 visual-studio
在C#中有一种方法可以将类构造函数作为标准函数引用吗?原因是Visual Studio抱怨用lambdas修改函数,并且通常是一个简单的select语句.
例如var ItemColors = selectedColors.Select (x => new SolidColorBrush(x));
,selectedColors只是一个IEnumerable<System.Windows.Media.Color>
.
从技术上讲,lambda不应该是多余的吗?select接受一个类型T并返回类型U的函数.纯色画笔在这里采用(正确的)类型T并返回一个U.只有我看不到在C#中这样做.在F#中它会是这样的let ItemColors = map selectedColors (new SolidColorBrush)
.
TL; DR:我想我正在寻找有效的形式,var ItemColors = selectedColors.select (new SolidColorBrush)
其中不需要lamba.这在C#中是可能的还是语言无法表达这种结构?
我正在编写一个简单的游戏来学习获得更多的C++经验,我有一个想法,我觉得多态几乎可以工作,但没有.在这个游戏中,Party
移动相当线性地通过一个Map
,但偶尔可以Fork
在路上遇到一个.fork(基本上)是一个std::vector<location*>
.Originally我打算在Party
成员函数中编写如下代码:
if(!CurrLocation->fork_.empty())
// Loop through forks and show options to the player, go where s/he wants
else
(CurrLocation++)
Run Code Online (Sandbox Code Playgroud)
但我想知道以下某些变体是否会更好:
CurrLocation = CurrLocation->getNext();
Run Code Online (Sandbox Code Playgroud)
使用Fork实际上是从Location派生的,并且重载了一些新功能getNext()
.但在后一种情况下,在location
(低层次结构)将不得不提出的信息给用户,而不是"通过这个备份",我不觉得是优雅的,因为它夫妻一个location
来UserInterface::*
.
你的意见?
我为我的个人项目做了一些工作,现在我理解为什么人们告诉我们在编码之前计划出所有的接口和设计.我有一些好的课程,已经有一些工作代码,但总的来说组织(架构)有点乱,我已经说过"如果我再做一次,我会这样做. ..".问题是,我是否应该勾画出一个关于我希望我的代码看起来如何的计划,并将现有代码重构为新模型,或者我是否应该采用有效的方法,并为缺陷部分编写所有新代码(基本上开始)从头开始,从这个项目中获得相当数量的复制和粘贴).
我有git历史我不确定我想失去,但慢慢重写一切的任务似乎令人生畏.所以我要问的问题是:在重构一个年轻的项目时,是否应该使用进化或革命来第二次纠正它?
最近了解了DebuggerDisplay属性,我发现它非常有用。但是,令我惊讶的一件事是它没有[ConditionalAttribute("DEBUG")]
附加属性。有某种方法可以强制执行此操作,还是尝试尝试一个坏主意?还是因为其他原因没关系?
使用Seq.cast
似乎经常失败,即使对于如下简单的事情:
let xor c = Seq.cast c |> Seq.reduce (^^^)
xor [1;3] // Works, assuming because no cast is necessary
xor ['a';'b'] // Fails
xor [2u] // Fails
Run Code Online (Sandbox Code Playgroud)
后两者失败,Specified Cast无效.我错过了什么?
我试图用来Seq.cast
转换一堆东西uint16
,但由于某种原因它总是失败(即使我用它注释Seq.cast<uint32>
).怎么了?
我有一个辅助函数,它基本上在两个对象上调用CompareTo,但是会进行一些特殊的角点检查,转换等.
本来我写这个函数是这样的:
public static bool BetterCompare(IComparable lhs, IComparable rhs, out retCode)
{
...
retCode = lhs.CompareTo(rhs);
...
}
Run Code Online (Sandbox Code Playgroud)
但问题是,如果我有一个class AwesomeClass : IComparable<AwesomeClass>
.事实上,我有几个老IComparable
课程已经消失了IComparable<T>
.然而编译器生气,因为它无法将这些新对象转换为IComparable
.我不知道这是否会使情况变得更糟,但其中一些是abstract
(虽然抽象类确实提供了实现).
我怎么能传达"我想要两个我可以称之为CompareTo的对象",而不是让编译器给我任何嘴唇.优选地,新功能看起来不应该BetterCompare<AwesomeClass>(this, that, out retCode);
,但只是"做正确的事情".或者有没有更好的方法来做到这一点,而不是触及每个类,使他们两个 IComparable
和IComparable<T>
?
是否有一个"简单"的方式来实现类似CopyTo()
对MemberwiseCopy
(而不是Clone()
或者MemberwiseClone
在C#)?我不想创建一个新对象,因为我希望每个拥有旧对象的人都能够看到新对象的属性,这可能是完全不同的.虽然大多数这些派生自一个可以保留一些抽象函数的父类,但我不想写几百行代码只是为了逐个复制每个成员.可能需要复制所有这些(糟糕的设计,但它不是我的,也不是被重写).看起来微软会为此创建一个界面,还是我错过了什么?
c# ×5
debugging ×2
.net ×1
c++ ×1
coupling ×1
f# ×1
generics ×1
icomparable ×1
lambda ×1
memcpy ×1
polymorphism ×1
refactoring ×1
seq ×1