我想{$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, "}");
我有一个带有属性的简单类
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) 如何从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) 我使用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)
确实有效,但它通过阵列变平为一维结构.
请考虑以下代码:
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) 我知道,我在挑剔.但是当在仅包含布尔值(因此只有两个状态)的结构上实现IConvertible接口时,建议的返回值是IConvertible.GetTypeCode()
多少?该结构是可隐式转换的,与布尔值相当,除了字符串和XML表示之外几乎所有方面,它实际上都是一个布尔值.
如果我回来的话,我觉得我对框架撒谎,TypeCode.Boolean
但TypeCode.Object
似乎不必要地含糊不清.在您自己的结构中实现此方法有任何实际后果吗?
我有一个属性网格显示一个列表,例如一个类 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 = false
的Hidden
省略线(突出显示下面黄色).
谢谢.
我对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
我想写一些有趣的代码在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) 让我考虑一个返回一个的函数allocatable
数组的函数。是否应该在赋值之前分配保存结果的数组变量(在函数外部)?
例如,考虑以下程序
\nprogram 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根据this和thisres
,为 的 结果分配的数组get_matrix
一旦超出范围就会被释放。
w
对主程序中未分配变量的赋值是否会延长结果的范围get_matrix
?换句话说,如果我allocate(w(2,2))
在主程序中省略,我会得到未定义的行为吗?
省略allocate(w(2,2))
并使用gfortran …