我有一种感觉,答案是"不可能",但我会试一试......我处于一个不值得羡慕的位置,修改了一些增强功能的旧版VB6应用程序.转换为更智能的语言不是一种选择.该应用程序依赖于大量用户定义的类型来移动数据.我想定义一个公共函数,它可以引用任何这些类型并提取包含的数据.
在伪代码中,这是我正在寻找的:
Public Sub PrintUDT ( vData As Variant )
for each vDataMember in vData
print vDataMember.Name & ": " & vDataMember.value
next vDataMember
End Sub
Run Code Online (Sandbox Code Playgroud)
似乎这个信息需要在某个地方提供给COM ...任何VB6大师都在乎小心翼翼地拍摄?
谢谢,
担
我想在我的代码中使用http://code.google.com/p/stateless将功能与其依赖项分开.我没有找到任何高级的用法示例,所以这个问题是关于无状态框架的最佳实践.
我有以下配置(这只是一个例子,只有一个功能状态):
var stateMachine = new StateMachine(State.Stopped);
stateMachine.Configure(State.Stopped)
.Permit(Trigger.Failed, State.Error)
.Permit(Trigger.Succeed, State.GenerateMachineData);
stateMachine.Configure(State.GenerateMachineData)
.Permit(Trigger.Failed, State.Error)
.Permit(Trigger.Succeed, State.Finished);
public enum State
{
Stopped,
GenerateMachineData,
Finished,
Error
}
public enum Trigger
{
Succeed,
Failed
}
Run Code Online (Sandbox Code Playgroud)
那么在哪里调用实际的功能.我有以下想法,但每个都有优点和缺点:
1)在OnEntry()中设置功能以及下一次触发:
stateMachine.Configure(State.GenerateMachineData)
.OnEntry(() => {
try {
Generate();
stateMachine.Fire(Trigger.Succeed);
} catch {
stateMachine.Fire(Trigger.Error);
}
})
.Permit(Trigger.Failed, State.Error)
.Permit(Trigger.Succeed, State.Finished);
Run Code Online (Sandbox Code Playgroud)
那么如果我只是打电话
stateMachine.Fire(Trigger.Succeed);
Run Code Online (Sandbox Code Playgroud)
它最终在State.Finished或State.Error中结束
2)将状态机和功能分开,如:
__CODE__或__CODE__直接传入,因为这可能不是你想要发生的.即使他们这样做了,你仍然需要__CODE__/ __CODE__处理创建对象的错误.供应商是一种懒惰的回调,它允许一次性创建,使用和关闭实际对象,而不必进行大量的丑陋__CODE__/ __CODE__错误处理.
例如,只需查看将一个文件复制到另一个文件所需的代码(使用Guava实用程序将实际复制和流关闭代码最小化):
void DoTheStuff() …
我想生成一个并排的SVN diff而不是通常的SVN diff输出.有没有办法获得这种输出?
我在网上进行了研究,但没有找到我想要或不清楚的解决方案.
我正在使用C#进行WPF应用程序.我想弹出一个对话框,提示用户输入他/她的名字.之后,我将跟踪名称并使用名称将一些数据保存到txt文件中.
例如,
名称输入是name ="John"
所以我有一个数据数据="1,2,3";
然后我将"数据"保存在John.txt文件中.
谁知道怎么做?我认为问题是如何弹出一个对话框供用户输入名称.
谢谢!
我正在尝试将位图转换为图标.但是有一些错误,因为结果文件只是空白.
private void btnCnvrtSave_Click(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(sourceFile); //sourceFile = openfiledialog.FileName;
IntPtr Hicon = bmp.GetHicon();
Icon myIcon = Icon.FromHandle(Hicon);
SaveFileDialog sfd = new SaveFileDialog();
sfd.Title = "Save Icon";
sfd.Filter = "Icon|*.ico";
sfd.ShowDialog();
FileStream fileStream = new FileStream(sfd.FileName, FileMode.OpenOrCreate);
myIcon.Save(fileStream);
fileStream.Flush();
fileStream.Close();
MessageBox.Show("Image is converted successfully!");
//Process.Start(sfd.FileName);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多来弄清楚问题,但不能.请告诉我问题出在哪里.
我正在研究流行的压缩算法是如何工作的,所以我可以实现自己的zip归档.关于拉链的确切运作方式是否有任何资源?
这可能是一个广泛的问题,但这是我不太清楚和非常好奇的事情.
通常,对于某些问题,我听到的原因是因为Generics在.NET 1.0中不可用.这让我想到以下两件事之一:
之前没有想到泛型,所以开发人员在.NET 1.0之后提出它可能会极大地影响C#和.NET的设计,但由于已做出的决定(向后兼容性)而无法实现.
泛型从一开始就一直在计划中,因此不使用.NET 1.0发布它的唯一问题是无法在2.0之前使用它.但除此之外,没有引入或错误的冗余功能,提出了不可逆转的决定.
我大多假设#1,但实际情况是#2?
以下代码生成错误:
错误:'CERas.CERAS'是'type',在给定的上下文中无效
为什么会出现此错误?
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinApp_WMI2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
CERas.CERAS = new CERas.CERAS();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Mercurial Shelve扩展来保留命令行的更改.它很好用,除非我想搁置的更改包含工作目录中的新添加文件(a).基本上,除了新添加的文件外,它还可以上架.我通过查看.hg/shelve存储的更改来检查这一点.
如何搁置新添加的文件(状态)?