小编ja7*_*a72的帖子

使用大括号格式化字符串

我想{$100.00}使用带有的string.Format(fmt, x)语句在大括号(示例)中输出格式化的数字x=100.

{ 
    var x = 100M;
    // works fine without a format specifier
    string.Format("{{{0}}}", x);    // "{100.00}"

    // fails with a format specifier
    string.Format("{{{0:C}}}", x);  // "{C}"

    // works with spaces
    string.Format("{{ {0:C} }}", x);  // "{ $100.00 }"
}
Run Code Online (Sandbox Code Playgroud)

那么我应该使用上面的格式字符串来获得{$100}不使用笨重的解决方案,例如string.Format("{0}{1:C}{2}", "{", x, "}");

c# string-formatting

27
推荐指数
2
解决办法
1780
查看次数

如何从()=> foo.Title表达式获取对象实例

我有一个带有属性的简单类

class Foo 
{ 
    string Title { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

我试图通过调用函数来简化数据绑定

BindToText(titleTextBox, ()=>foo.Title );
Run Code Online (Sandbox Code Playgroud)

这被宣称为

void BindToText<T>(Control control, Expression<Func<T>> property)
{
    var mex = property.Body as MemberExpression;
    string name = mex.Member.Name;

    control.DataBindings.Add("Text", ??? , name);
}
Run Code Online (Sandbox Code Playgroud)

那么我应该???为我的Foo班级实例投入什么呢.如何foo从lambda表达式中获取对调用实例的引用?

编辑: 实例应该在某处,因为我可以调用property.Compile()并创建一个使用foo我的BindToText函数中的实例的委托.所以我的问题是,如果可以在不添加函数参数中实例的引用的情况下完成此操作.我呼吁Occum的Razor提供最简单的解决方案.

编辑2: 许多人没有注意到的是在我的函数内部访问实例时存在的闭包foo,如果我编译lambda.为什么编译器知道在哪里找到实例,我不知道?我坚持认为必须有一个答案,不必通过额外的论证.


感谢VirtualBlackFox解决方案是这样的:

void BindText<T>(TextBoxBase text, Expression<Func<T>> property)
{
    var mex = property.Body as MemberExpression;
    string name = …
Run Code Online (Sandbox Code Playgroud)

c# data-binding lambda expression-trees .net-3.5

26
推荐指数
1
解决办法
5820
查看次数

从2d变换矩阵中提取旋转,缩放值

如何从2d变换矩阵中提取旋转,缩放和平移值?我的意思是有一个2d的转变

matrix = [1, 0, 0, 1, 0, 0]

matrix.rotate(45 / 180 * PI)
matrix.scale(3, 4)
matrix.translate(50, 100)
matrix.rotate(30 / 180 * PI)
matrix.scale(-2, 4)
Run Code Online (Sandbox Code Playgroud)

现在我的矩阵有值[a,b,c,d,tx,ty]

让我们忘记上面的过程,并想象我们只有值a,b,c,d,tx,ty

如何通过a,b,c,d,tx,ty找到总旋转和比例值

对不起我的英语不好

谢谢你的进步

编辑

我认为应该是某个地方的答案......

我刚刚在Flash Builder(AS3)中试过这样的

   var m:Matrix = new Matrix;
   m.rotate(.25 * Math.PI);
   m.scale(4, 5);
   m.translate(100, 50);
   m.rotate(.33 * Math.PI);
   m.scale(-3, 2.5);

   var shape:Shape = new Shape;
   shape.transform.matrix = m;

   trace(shape.x, shape.y, shape.scaleX, shape.scaleY, shape.rotation);
Run Code Online (Sandbox Code Playgroud)

输出是:

x = -23.6 
y = 278.8 
scaleX = 11.627334873920528 
scaleY = -13.54222263865791 
rotation = 65.56274134518259 …
Run Code Online (Sandbox Code Playgroud)

math matrix flash-builder

21
推荐指数
3
解决办法
2万
查看次数

如何快速将对象[,]上传到double [,]?

我使用Microsoft.Office.Interop.Excel我返回一个object[,]包含double元素的2D数组类型.请注意,索引下限1不是默认值0,但我可以轻松处理.

如何很好地将数组转换为double[,]使用.NET 3.5.(很好地,我的意思是简洁,或紧凑).

注意

double[] values_2 = values.Cast<double>().ToArray();
Run Code Online (Sandbox Code Playgroud)

确实有效,但它通过阵列变平为一维结构.

c# vb.net office-interop

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

什么是2D点结构的适当`GetHashCode()`算法(避免冲突)

请考虑以下代码:

struct Vec2 : IEquatable<Vec2>
{
    double X,Y;

    public bool Equals(Vec2 other)
    {
        return X.Equals(other.X) && Y.Equals(other.Y);
    }

    public override bool Equals(object obj)
    {
        if (obj is Vec2)
        {
            return Equals((Vec2)obj);
        }
        return false;
    }

    // this will return the same value when X, Y are swapped
    public override int GetHashCode()
    {
        return X.GetHashCode() ^ Y.GetHashCode();
    }

}
Run Code Online (Sandbox Code Playgroud)

除了比较双精度的平等对话(这只是演示代码)之外,我关注的是当X,Y值被交换时存在哈希冲突.例如:

Vec2 A = new Vec2() { X=1, Y=5 };
Vec2 B = new Vec2() { X=5, Y=1 };

bool test1 = …
Run Code Online (Sandbox Code Playgroud)

c# point hashcode

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

实现IConvertible.GetTypeCode

我知道,我在挑剔.但是当在仅包含布尔值(因此只有两个状态)的结构上实现IConvertible接口时,建议的返回值是IConvertible.GetTypeCode()多少?该结构是可隐式转换的,与布尔值相当,除了字符串和XML表示之外几乎所有方面,它实际上都是一个布尔值.

如果我回来的话,我觉得我对框架撒谎,TypeCode.BooleanTypeCode.Object似乎不必要地含糊不清.在您自己的结构中实现此方法有任何实际后果吗?

MSDN上的IConvertible.GetTypeCode

.net

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

如何在运行时控制属性网格中可见的内容?

我有一个属性网格显示一个列表,例如一个类 Person

[TypeConverter(typeof(ExpandableObjectConverter))]
public class Person
{
    public bool ShowHidden { get; set; }
    public string Name { get; set; }
    //[Browsable(false)]
    public string Hidden { get; set; }

    public override string ToString()
    {
        return string.Format("Person({0})", Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是如何控制的Browsable()在运行时,使得属性时ShowHidden = falseHidden省略线(突出显示下面黄色).

截图

谢谢.

c# propertygrid winforms

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

C#中Math.Sin()和Math.Cos()的准确性

我对CLR中内在触发功能的不准确性感到非常恼火.众所周知

Math.Sin(Math.PI)=0.00000000000000012246063538223773
Run Code Online (Sandbox Code Playgroud)

而不是0.发生类似的事情Math.Cos(Math.PI/2).

但是当我进行一系列长时间的计算时,我会对特殊情况进行评估

Math.Sin(Math.PI/2+x)-Math.Cos(x)
Run Code Online (Sandbox Code Playgroud)

对于x = 0.2,结果为零,但对于x = 0.1,结果为零(试一试).另一个问题是当论证数量很大时,不准确性会成比例地变大.

所以我想知道是否有人编写了一些更好的C#中的trig函数表示,以便与世界共享.CLR是否调用了一些实现CORDIC或类似的标准C数学库?链接:维基百科CORDIC

c# clr trigonometry

7
推荐指数
4
解决办法
8503
查看次数

如何在Windows 7中设置显示器方向?

我想写一些有趣的代码在Windows 7上翻转方向.请参阅我想要控制的选项的屏幕截图.


监控方向


这是我的代码:

class Program
{
    public const long WM_PAINT=0x0F;
    public const long WM_DISPLAYCHANGE=0x7E;

    [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
    public struct DEVMODE // taken from Win API
    {
        ...
        public System.Windows.Forms.ScreenOrientation dmDisplayOrientation;
    }

    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);
    [DllImport("user32.dll", CharSet=CharSet.Ansi)]
    public static extern int ChangeDisplaySettings(ref DEVMODE lpDevMode, int dwFlags);
    [DllImport("User32.Dll")]
    public static extern long PostMessage(IntPtr hWnd, long wMsg, long wParam, long lParam);


    static void Main(string[] args)
    {

        ScreenOrientation ori=ScreenOrientation.Angle0;
        DEVMODE mode=new DEVMODE()
        {
            dmSize=(short)Marshal.SizeOf(typeof(DEVMODE)),
            dmDriverExtra=0, …
Run Code Online (Sandbox Code Playgroud)

c# screen-orientation

7
推荐指数
1
解决办法
6541
查看次数

Fortran 函数返回可分配数组

让我考虑一个返回一个的函数allocatable数组的函数。是否应该在赋值之前分配保存结果的数组变量(在函数外部)?

\n

例如,考虑以下程序

\n
program mem\n  implicit none\n\n  interface\n     function get_matrix() result(res)\n       real(kind=kind(0.d0)), allocatable :: res(:,:)\n     end function get_matrix\n  end interface\n  \n  real(kind=kind(0.d0)), allocatable :: w(:,:)\n\n  allocate(w(2,2)) ! Is this necessary?\n  w=get_matrix()\n  deallocate(w)\n\nend program mem\n\nfunction get_matrix() result(res)\n  real(kind=kind(0.d0)), allocatable :: res(:,:)\n\n  allocate(res(2,2))\n  res = 0.d0\n  res(1, 1) = 1.d0\n  res(2, 2) = 1.d0\nend function get_matrix\n
Run Code Online (Sandbox Code Playgroud)\n

根据thisthisres ,为 的 结果分配的数组get_matrix一旦超出范围就会被释放。

\n

w对主程序中未分配变量的赋值是否会延长结果的范围get_matrix?换句话说,如果我allocate(w(2,2))在主程序中省略,我会得到未定义的行为吗?

\n

省略allocate(w(2,2))并使用gfortran …

fortran function allocatable-array

7
推荐指数
2
解决办法
2725
查看次数