我怎么能这样做?
int v1 = 4;
int v2 = 3;
int v3 = 2;
int v4 = 1;
int [] vars = new int [] {ref v1, ref v2, ref v3, ref v4};
for (var i = 0; i < 4; i++) {
ChangeVar (vars [i], i);
}
void ChangeVar (ref int thatVar, int newValue) {
thatVar = newValue;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我想这样做是因为这些变量是由其他类直接访问的.例如v1可以是某物的宽度,v2可以是某物的高度.我的一些类使用width变量来限制它必须从用户获得的输入的长度.有些类使用height变量来做其他事情.但我希望能够使用循环编辑这些变量,因为现在这是编辑过程的工作方式:
int indexOfVarToChange = GetIndex ();
switch (indexOfVarToChange) {
case 0:
int newValue = GetNewValue ();
width = newValue;
break; …Run Code Online (Sandbox Code Playgroud) 所以我今天发现结构和类在 C# 中用于分配变量时的行为不同..据我所知,当我将结构分配给变量时,变量存储该结构的副本,当我分配一个类时到一个变量,该变量存储对该类实例的引用。
在这种情况下,dad2 包含一个 dad1 的副本,所以我对 dad2 做的任何事情都不应该影响 dad1 吗?显然情况并非如此,因为当我将一个儿子添加到 dad2 时,它也会将同一个儿子添加到 dad1。
public struct Dad {
public string name;
public List <Son> sons;
public struct Son {
public string name;
public Son (string n) {
name = n;
}
}
}
static void Main (string [] args) {
Dad dad1 = new Dad ();
dad1.name = "Bob";
dad1.sons = new List <Dad.Son> {new Dad.Son ("A")};
Dad dad2 = dad1;
Debug.WriteLine (dad2.Equals (dad1) + " " + dad1.sons.Count () …Run Code Online (Sandbox Code Playgroud) 我使用Visual C#2008 Express制作了一个控制台游戏,整个游戏只使用来自System命名空间的东西,没有花哨的第三方库,并且它需要的是根目录中的2个文件夹,用于存储它创建的XML文件.我甚至可以进入Debug文件夹并复制应用程序和2个文件夹并将它们粘贴到其他地方,它们都可以工作.所以我想我可以将游戏分发为压缩文件夹.
我想知道的是,没有安装Visual Studio的最终用户需要运行此游戏的最低限度是什么?我看了一下我的非程序员朋友,她的名字中包含"Microsoft Visual"的10多件事,比如她安装的程序列表中的.NET框架和Redistributable Package.我真的不知道这些是什么.
我正在尝试使用JNI以最简单的方式在我朋友的64位OSX上加入Java和C,我收到了这个错误.以下是涉及的一切:
test.java
public class test {
static {System.loadLibrary ("test");}
native void aaa ();
public static void main (String [] args) {
new test ();
}
public test () {
aaa ();
}
}
Run Code Online (Sandbox Code Playgroud)
test.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class test */
#ifndef _Included_test
#define _Included_test
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: test
* Method: aaa
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_test_aaa
(JNIEnv …Run Code Online (Sandbox Code Playgroud) 这种方法比较图像的像素值吗?我猜它不会起作用,因为它们彼此的大小不同但是如果它们是相同的,但是以不同的格式呢?例如,我拍了一个截图并保存为.jpg另一个并保存为.gif.
我感兴趣的是条形下方的所有内容,其中的按钮决定了属性的显示方式.我能想到的只有一个分离器和一个状态条.
我所追求的是如何有2个部分我想添加标题属性和值,这些部分可以用分割器调整大小(我假设在这种情况下使用分割器),每个属性都可以选择和相应的说明显示在状态栏上,每个值可以是文本或下拉框.
编码部分我可以自己做,我需要知道的是控制窗口是由什么组成的,以及它是如何组合在一起的.
我正在创建一个屏幕共享应用程序.启动屏幕共享时,我将桌面墙纸颜色更改为黑色.
问题 如何恢复以前的壁纸或Windows主题?
我使用代码将背景更改为纯色,如下所示
此外,此代码存在问题,一旦使用此代码更改背景,我无法将图像设置为壁纸,但我可以应用主题.
public class wallpaperHelper
{
public static void SetColor(Color color)
{
// Remove the current wallpaper
NativeMethods.SystemParametersInfo(
NativeMethods.SPI_SETDESKWALLPAPER,
0,
"",
NativeMethods.SPIF_UPDATEINIFILE | NativeMethods.SPIF_SENDWININICHANGE);
// Set the new desktop solid color for the current session
int[] elements = { NativeMethods.COLOR_DESKTOP };
int[] colors = { System.Drawing.ColorTranslator.ToWin32(color) };
NativeMethods.SetSysColors(elements.Length, elements, colors);
// Save value in registry so that it will persist
RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Colors", true);
key.SetValue(@"Background", string.Format("{0} {1} {2}", color.R, color.G, color.B));
}
private static class …Run Code Online (Sandbox Code Playgroud) 我已经设法编写一个模板类来像回调一样工作,从这个问题的接受答案中学习如何定义一般成员函数指针.
我希望有一个字符串键和回调值的映射,以便我可以调用匹配字符串的正确回调.这没关系,但我需要地图来支持来自不同类的回调.现在它只能用于一个类.它可以是任何类,因为模板只是来自同一个类的回调集合.
class Apple {
public:
void Red () {
cout << "aa";
}
};
class Orange {
public:
void Blue () {
cout << "bb";
}
};
template <typename T>
class Callback {
T *obj;
void (T::*ptr) (void);
public:
Callback (T *obj, void (T::*ptr) (void)) : obj (obj), ptr (ptr) {
}
void Call () {
(obj->*ptr) ();
}
};
Run Code Online (Sandbox Code Playgroud)
我可以这样使用它
Apple apple;
Orange orange;
Callback <Apple> callA (&apple, &Apple::Red);
Callback <Orange> callB (&orange, &Orange::Blue);
callA.call (); …Run Code Online (Sandbox Code Playgroud) c++ templates member-function-pointers function-pointers callback