我已经定义了一个泛型类" Lazy<T>",用于惰性评估和缓存委托的结果Func<T>.
我还定义了两个隐式转换运算符,所以我可以Lazy<T>从一个Func<T>s 创建一个,我可以分配Lazy<T>给一个T(得到Value的Lazy<T>)
我们的想法是,您可以传递Lazy<T>一个实例T,但不能在计算/检索值之前完成工作,直到将其分配给实际的实例T.
// class Lazy<T>
// Encapsulates a value which can be retrieved when first accessed,
// and is then cached.
class Lazy<T>
{
private Func<T> _getter;
private T _cached;
private bool _isCached;
// Get/set the getter delegate
// that 'calculates' the value.
public Func<T> Getter
{
get
{
return _getter;
}
set
{
_getter = …Run Code Online (Sandbox Code Playgroud) 在C#中使用Xml序列化时,我想将输入XML的一部分反序列化为XmlNode.
所以,鉴于这个XML:
<Thing Name="George">
<Document>
<subnode1/>
<subnode2/>
</Document>
</Thing>
Run Code Online (Sandbox Code Playgroud)
我想将Document元素反序列化为XmlNode.
下面是我给出上面的XML的尝试,将Document设置为'subnode1'元素而不是'Document'元素.
如何获取将Document属性设置为Document元素的代码?
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
[Serializable]
public class Thing
{
[XmlAttribute] public string Name {get;set;}
public XmlNode Document { get; set; }
}
class Program
{
static void Main()
{
const string xml = @"
<Thing Name=""George"">
<Document>
<subnode1/>
<subnode2/>
</Document>
</Thing>";
var s = new XmlSerializer(typeof(Thing));
var thing = s.Deserialize(new StringReader(xml)) as Thing;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用XmlSerializer将上面的XML反序列化为Thing实例时,Document属性包含子元素'subnode1',而不是'Document'元素.
如何让XmlSerializer将Document设置为包含'Document'元素的XmlNode?
(注意:我可以通过指定XmlElement []类型的属性并将其标记为[XmlAnyElement]来获取Document元素,但是将其设置为所有无法识别的元素的数组,而不是仅仅一个名为"Document"的元素.
我有一个HBITMAP包含alpha通道数据.我可以使用::AlphaBlendGDI函数成功渲染它.
但是,当我调用::GetPixelGDI函数时,我永远不会使用alpha组件返回值.文档确实说它返回像素的RGB值.
有没有办法检索一个像素的alpha通道值HBITMAP?
我希望能够检测何时使用:: AlphaBlend,以及何时使用旧式方法将源HBITMAP中的特定颜色视为透明.
HDC sourceHdc = ::CreateCompatibleDC(hdcDraw);
::SelectObject(sourceHdc, m_hbmp);
// This pixel has partial transparency, but ::GetPixel returns just RGB.
COLORREF c = ::GetPixel(sourceHdc, 20, 20);
// Draw the bitmap to hdcDraw
BLENDFUNCTION bf1;
bf1.BlendOp = AC_SRC_OVER;
bf1.BlendFlags = 0;
bf1.SourceConstantAlpha = 0xff;
bf1.AlphaFormat = AC_SRC_ALPHA;
::AlphaBlend(di.hdcDraw, x, 10, 64, 64, sourceHdc, 0, 0, 64, 64, bf1);
::DeleteDC(sourceHdc);
Run Code Online (Sandbox Code Playgroud)
使用GetDIBits检索图像的第一个(或更多)扫描线:
byte* bits[1000];// = new byte[w * 4];
BITMAPINFO bmi;
memset(&bmi, …Run Code Online (Sandbox Code Playgroud) 您是否知道快速过滤字符串列表以获取包含指定字符串的子集的方法?显而易见的实现是遍历列表,检查每个字符串是否包含搜索字符串.有没有办法索引字符串列表,以便可以更快地完成搜索?
我想用"透明白色"替换位图的矩形区域中的所有像素 - 即,a = 0,b = 255,r = 255,g = 255.
FillRectangle不这样做 - 给定透明画笔,现有像素不变.
我是否需要为矩形中的每个像素单独使用SetPixel?
在这段代码中,我创建了一个字符串"1"到"10000"的数组:
array_of_strings = (1..10000).collect {|i| String(i)}
Run Code Online (Sandbox Code Playgroud)
Ruby Core API是否提供了一种获取可枚举对象的方法,该对象允许我枚举相同的列表,根据需要生成字符串值,而不是生成字符串数组?
这是另一个例子,希望澄清我想要做的事情:
def find_me_an_awesome_username
awesome_names = (1..1000000).xform {|i| "hacker_" + String(i) }
awesome_names.find {|n| not stackoverflow.userexists(n) }
end
Run Code Online (Sandbox Code Playgroud)
xform我正在寻找的方法在哪里.awesome_names是一个Enumerable,因此xform不是创建一个100万个元素的字符串数组,而只是根据需要生成和返回"hacker_ [N]"形式的字符串.
顺便说一句,这就是它在C#中的样子:
var awesomeNames = from i in Range(1, 1000000) select "hacker_" + i;
var name = awesomeNames.First((n) => !stackoverflow.UserExists(n));
Run Code Online (Sandbox Code Playgroud)
(一种解决方案)
这是Enumerator的扩展,它添加了一个xform方法.它返回另一个枚举器,它迭代原始枚举器的值,并应用了一个变换.
class Enumerator
def xform(&block)
Enumerator.new do |yielder|
self.each do |val|
yielder.yield block.call(val)
end
end
end
end
# this prints out even numbers from 2 to 10:
(1..10).each.xform {|i| …Run Code Online (Sandbox Code Playgroud) 是否有任何问题可能使MS的T4模板代码生成系统不适合生成C++代码?
当我使用Bitmap :: FromHBITMAP函数创建新的Gdiplus :: Bitmap时,生成的Bitmap是不透明的 - 没有保留原始HBITMAP的部分透明度.
有没有办法从HBITMAP创建一个带来alpha通道数据的Gdiplus :: Bitmap?
我在WPF窗口中使用GridSplitter.分割器上方是一个TreeView,下面是一个DockPanel,其中包含一个文本框.当我在TreeView中选择一个项目时,DockPanel的内容将通过数据绑定进行更新.
根据TextBox的内容,窗口的下部窗格会扩展和缩小.我希望它从高度X开始,并保持在那个高度,除非用户拖动GridSplitter.
我尝试在XAML中设置下部DockPanel的高度,但这会修复DockPanel的高度,以便在移动GridSplitter时不会调整大小.也许解决方案涉及Grid.Row Heights?
这是我的页面的一般结构.
Window
Grid
row1 Height="*": TreeView
row2 Height="5": GridSplitter
row3 Height="auto": DockPanel // gets taller and shorter depending on its content.
...
TextBox
Run Code Online (Sandbox Code Playgroud)
BTW:在我拖动GridSplitter之后,调整大小停止发生,UI表现我想要的样子.
我知道可以将VS配置为不逐步执行特定功能(例如,您知道可行的无聊智能指针代码,并且只是在调试时理解代码的方式).我如何为我正在调试的代码中使用的自定义智能指针执行此操作?