小编Cam*_*tin的帖子

在C#中命名Windows API常量

C#中常量命名约定是Pascal大小写:

private const int TheAnswer = 42;
Run Code Online (Sandbox Code Playgroud)

但有时我们需要从Windows API中表示已存在的常量.

例如,我不知道如何命名:

/// <summary>
/// With this style turned on for your form, 
/// Windows double-buffers the form and all its child controls.
/// </summary>
public const int WS_EX_COMPOSITED = 0x02000000;
Run Code Online (Sandbox Code Playgroud)

我该怎么命名呢?

保持它WS_EX_COMPOSITED可以让我快速将它与WinAPI相关联,但这是错误的.

一些选择:

  • WsExComposited - 太匈牙利人了
  • Composited - 太短
  • WsExenum with Compositedin it - 仍然是匈牙利人
  • ExtendedWindowsStyles.Composited - 班级常数?枚举?

应该指出的是,良好命名的目标是:

  • 它必须是可读的.
  • 它不能触发FxCop和StyleCop,即使这意味着将它隐藏起来.

c# pinvoke winapi constants naming-conventions

13
推荐指数
1
解决办法
774
查看次数

C#已调整大小的图像具有黑色边框

我在.NET中的图像缩放有问题.我使用标准的Graphics类型来调整图像大小,如下例所示:

public static Image Scale(Image sourceImage, int destWidth, int destHeight)
{
        Bitmap toReturn = new Bitmap(sourceImage, destWidth, destHeight);

        toReturn.SetResolution(sourceImage.HorizontalResolution, sourceImage.VerticalResolution);

        using (Graphics graphics = Graphics.FromImage(toReturn))
        {
            graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.DrawImage(sourceImage, 0, 0, destWidth, destHeight);
        }
        return toReturn;
    }
Run Code Online (Sandbox Code Playgroud)

但是我对调整大小的图像有一个很大的问题:它们有灰色和黑色边框,制作没有图像的图像非常重要.

它们为什么出现以及我能做些什么使它们消失?

样本输出:

样本输出

.net c# scaling image

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

有没有办法在Visual Studio中记录和回放编码会话?

我读过Robert Martin的"清洁代码",它在80年代的Emacs中已经能够录制和播放你的编码会话.
我刚刚意识到我从这种练习中学到了多少,我很想了解自己!

但是我真的不认为录制屏幕(如视频)会非常有效,特别是因为Visual Studio已经无法忍受的速度慢,而且在播放器中寻找视频也很无聊.

相反,有一些插件可以记录我编码的内容(所以不是调试和视觉设计师等)真的很棒,并且可以回放给我看看我有多吮吸和在哪里.

这可能吗?

编辑:只是从书中引用,以显示这可能是多么有趣:

鲍勃进入模块.
他向下滚动到需要改变的功能.
考虑到他的选择,他停顿了一下.
哦,他正在向上滚动到模块的顶部以检查变量的初始化.
现在他向下滚动并开始输入.
哎呀,他正在抹掉他打字的东西!
他再次打字.
他再次擦掉它!
他输入了其他一半的东西但随后删除了!
他向下滚动到另一个函数,该函数调用他正在改变的函数以查看它是如何被调用的.
他向上滚动并键入他刚删除的相同代码.
他停顿了一下.
他再次删除了那段代码!
他弹出另一个窗口,看着一个子类.这个功能被覆盖了吗?

...

profiling keylogger visual-studio

12
推荐指数
1
解决办法
652
查看次数

请在javascript中解释冒号的这种用法

我正在创建一个库,我经常检查Closure Compiler输出的结果,看看它是如何做的(我确实有单元测试,但我仍然希望看到编译代码以获得更好的压缩方式的提示).

所以,我发现了这段非常奇怪的代码,这是我以前从未见过的.

variable : {
    some();
    code()
}
Run Code Online (Sandbox Code Playgroud)

注意:这不是对象文字!此外,没有?任何地方,将使它一个?:条件.
该代码位于常规功能块(IIFE)中.

variable在这种情况下,是一个未定义的变量.没有任何代码可以将它变为真,假,或其他任何东西,只是为了确保,我把它console.log放在那里,的确,我得到了一个ReferenceError.

请注意我也在IE8中测试我的代码,所以这不仅仅是在现代浏览器中.它似乎是标准的,普通的旧javascript.

所以让我们试一试吧.点击Chrome的控制台,我得到了这个:

undeclaredVariable:{console.log('does this get logged?')} // yes it does.
trueValue:{console.log('what about this?')}               // same thing.
falseValue:{console.log('and this?')}                     // same thing.
Run Code Online (Sandbox Code Playgroud)

但是之后...

(true):{console.log('does this work too?')} // SyntaxError: Unexpected token :
Run Code Online (Sandbox Code Playgroud)

...和...

so?{console.log('is this a conditional?')}:{alert(123)} // Unexpected token .
Run Code Online (Sandbox Code Playgroud)

那它是做什么的?

thisThing:{console.log('is used to declare a variable?')}
thisThing …
Run Code Online (Sandbox Code Playgroud)

javascript syntax colon

12
推荐指数
1
解决办法
261
查看次数

我应该使用与.NET BCL名称冲突的(否则是最佳的)类名吗?

这种情况对于你们中的一些人来说可能并不完全不常见:你们有一些功能要放在一个类中,但是这个类的完美名称(*)是由System命名空间中的一个类或其他不属于你的命名空间/类所占用的.你在using/ import.

(*)完美我的意思是小巧,简洁和清晰的名字.

例如,我有一个UtilsDiagnostics(主要是debug utils)类和一个Drawing类.我可以:

  1. 有一个DrawingUtils类和一个DiagnosticsUtils类,但这只是闻起来像坏结构.
  2. 选择一个词库并完成一个更糟糕,更长或更尴尬的名字,这个名字随便仍未被拍摄.
  3. 用我的母语而不是英语写下课程名称.
  4. 向StackOverflow的聪明人询问.

我认为选项1-3并不乐观:(

编辑:

由于我选择的答案并没有明确地解决问题(我也不这样做),我建议那些面临同样情况的人要问自己:你会经常使用冲突的BCL类/命名空间吗?如果不是,那么让你的名字发生冲突(就像我在诊断中所做的那样).如果是,请添加一个限制类/命名空间可能性的单词.

在实践中,这意味着::
"Drawing"绘制的东西.
"MyCustomControlDrawing":东西借鉴MyCustomControl.例如:"WidgetDrawing".

EDIT2:

下一次看看的另一个解决方案:扩展方法(由割草机提供).

c# vb.net naming-conventions classname fully-qualified-naming

10
推荐指数
4
解决办法
1135
查看次数

使用CSS过滤器模拟Photoshop的"颜色叠加"?

我有一个图标,我想用CSS改变颜色.它是在CSS中内联的数据优化的SVG中.

通常情况下,这不可能的.这就是图标字体被发明的原因; 它们相对于SVG的主要优势是能够从CSS 接收colortext-shadow规则.好吧,CSS过滤器现在能够同时处理任意图像,现在它们可以在所有Blink,Webkit和Gecko浏览器中使用,并且可以用于未来的IE/Spartan.

text-shadow更换是容易的; 只需使用drop-shadow过滤器.

然而,尽管所有必要的滤镜都在这里,但是将图像着色为特定的颜色已经证明是非常棘手的.到目前为止,我的理论如下:

  • 使用contrast(0)转整个图像变成纯灰,同时保持alpha通道(Mozilla的维基说,它会变成黑色,但在所有的浏览器就变成灰色,必须是一个错字).
  • 使用sepia(1),因为我们无法对灰度图像上的色调/饱和度进行操作.这样可以确保整个图像由我们可以进行数学运算的参考颜色组成; 特别是#AC9977.

在这一点上,我们应该能够将整个图像从现在的实体#AC9977转变为我们想要使用的任何颜色hue-rotate,saturate并且brightness.

首先,浏览器使用什么颜色坐标?如果它使用HSL(亮度)或HSV(),我无法确定规格是否合理,但由于HSB(亮度)是HSV的另一个名称,我想它正在使用HSV.此外,使用像饱和颜色(而不是使它们变成白色)这样的东西,这将在HSV而不是HSL中发生.brightness(999)

根据这一假设,我们将按如下方式进行:

  • 计算#AC9977我们想要的颜色和颜色之间的差异,并使用hue-rotate.
  • 计算两者之间的饱和度差异,并使用saturate.
  • 计算两者之间的亮度差异,并使用brightness.

由于这不是手工完成的事情,我们将使用LESS预处理器:

.colorize(@color) {
    @sepiaGrey: #AC9977;
    @hOffset: (hsvhue(@color) - hsvhue(@sepiaGrey)) * 1deg;
    @sRatio: …
Run Code Online (Sandbox Code Playgroud)

image-manipulation css3 hsv color-space css-filters

10
推荐指数
1
解决办法
6004
查看次数

返回后我应该在函数内调用Dispose()吗?

我应该在返回实现IDisposable的对象后调用.Dispose()吗?

myDisposableObject Gimme() {
  //Code
  return disposableResult;
  disposableResult.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

换句话说,对象是我返回副本,还是对象本身?谢谢 :)

.net c# vb.net dispose idisposable

9
推荐指数
3
解决办法
8729
查看次数

扩展方法是向Enum添加函数的唯一方法吗?

我有一个方向枚举:

Public Enum Direction
    Left
    Right
    Top
    Bottom
End Enum
Run Code Online (Sandbox Code Playgroud)

有时我需要得到逆,所以写起来似乎很好:

SomeDirection.Inverse()
Run Code Online (Sandbox Code Playgroud)

但我不能把一个方法放在枚举上!但是,我可以添加一个扩展方法(VS2008 +).

在VB中,扩展方法必须在模块内.我真的不喜欢那些模块,我正在尝试编写一个(适度)简单的类,我可以在一个文件中共享它以插入其他项目.

模块只能驻留在文件/命名空间级别,所以我现在在文件的底部有一个:

Public Class MyClass
    '...'
End Class

Public Module Extensions
    <Extension()> _
    Public Function Inverse(ByVal dir As Direction) As Direction
        '...'
    End Function
End Module
Run Code Online (Sandbox Code Playgroud)

它有效,"如果没有破坏,就不要修理它",但我很想知道我做错了,并且有更好的方法,更少的样板.也许在.NET 4中?

最后,我知道我可以编写一个行为类似于枚举的结构,但这看起来更加倒退.

.net vb.net extension-methods enums boilerplate

8
推荐指数
1
解决办法
1556
查看次数

CA1303,DoNotPassLiteralsAsLocalizedParameters,但实际上并非如此

我的代码获取CA1303预警Microsoft.Globalization"不要通过文字本地化参数",但我的代码实际上并没有通过文字:

private void MyForm_Load(object sender, EventArgs e)
{
    UpdateTitle();
}

private void UpdateTitle()
{
    Version version = Assembly.GetExecutingAssembly().GetName().Version;
    CultureInfo culture = CultureInfo.CurrentUICulture;
    this.Text = String.Format(culture, "{0} v{1}.{2} Alpha r{3}", this.Text, version.Major, version.Minor, version.Build);
}
Run Code Online (Sandbox Code Playgroud)

每次加载时,此代码都会将表单的标题设置为类似的内容:

MyFormNameAsSetInTheDesigner v0.1 Alpha r123

(version.build实际上包含SVN修订版,在每次提交时自动更新,我不使用,revision因为我的版本控制方案只使用3个数字,major.minor.revision)

但这会触发上述警告,因为它认为我是从字符串文字设置标题栏文本.实际上,我已经Localizable = True在设计器中进行了设置,以便从资源表中获取字符串.

我不想静态设置表单的标题,因为(特别是在alpha和beta阶段)我希望它具有动态版本号.

问题是我该怎么办,所以我没有得到警告(例如,哪些代码会执行我正在做的事情,但根据FxCop被认为是正确的,或者我怎么能为该行压制它).

.net fxcop localization visual-studio-2010 winforms

8
推荐指数
1
解决办法
5089
查看次数

如何在CSS中锐化图像?

如果我从任意URL(本地或远程)加载图像,并且不想使用javascript或服务器端处理,是否可以使用CSS从客户端锐化它?

css image image-processing client-side css3

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