我正在使用Outllok Interop将电子邮件从一个文件夹移动到另一个文件夹(在获取所有附件之后,但这有效)但它不会复制所有电子邮件.我已经尝试过等待,但它没有效果.首先它会移动6,然后移动3,然后移动1.可以有人告诉我它为什么不移动它们?
相关代码如下:
Application oOutlook = new Application();
NameSpace oNs = oOutlook.GetNamespace("MAPI");
Recipient oRep = oNs.CreateRecipient("ContentHelp");
MAPIFolder inbox = oNs.GetSharedDefaultFolder(oRep, OlDefaultFolders.olFolderInbox);
MAPIFolder nihSub = inbox.Folders["NIH"];
MAPIFolder nihArchive = inbox.Folders["NIHarchive"];
Items nihItems = nihSub.Items;
MailItem moveMail = null;
//inboxItems = inboxItems.Restrict("[Unread] = false");
int increment = 0;
try
{
foreach (object collectionItem in nihItems)
{
moveMail = collectionItem as MailItem;
if (moveMail != null)
{
Console.WriteLine("Moving {0}", moveMail.Subject.ToString());
string titleSubject = (string)moveMail.Subject;
moveMail.Move(nihArchive);
}
}
}
Run Code Online (Sandbox Code Playgroud) 如果值为空,我需要覆盖 XMLWriter 的方法“WriteElementString”以不写入元素,下面的代码不起作用,尝试了override和new关键字,但它仍然转到框架方法。
public static void WriteElementString(this XmlWriter writer,
string localName,
string value)
{
if (!string.IsNullOrWhiteSpace(value))
{
writer.WriteStartElement(localName);
writer.WriteString(value);
writer.WriteEndElement();
}
}
Run Code Online (Sandbox Code Playgroud)
答案很接近,但正确的解决方案是:
public abstract class MyWriter : XmlWriter
{
private readonly XmlWriter writer;
public Boolean skipEmptyValues;
public MyWriter(XmlWriter writer)
{
if (writer == null) throw new ArgumentNullException("Writer");
this.writer = writer;
}
public new void WriteElementString(string localName, string value)
{
if (string.IsNullOrWhiteSpace(value) && skipEmptyValues)
{
return;
}
else
{
writer.WriteElementString(localName, value);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我遇到这个简单代码的问题,我不明白为什么c#这样做.
问题似乎是c#在列表中使用列表时使用Linq表达式引用而不是值.
在数字循环中,我根据列表选择数字,它们都存在,所以所有数字都应该添加到列表{1,2,3}中.
当您在控制台中看到数字循环中显示{1,2,3}的输出时,行为正常.
问题在于列表的循环,在这里似乎Linq只将最后一个数字添加到列表中,因此它输出{3,3,3}.
我知道我不需要列表中的整数列表,但这只是为了证明这一点非常奇怪,这是一个已知的"错误"吗?
编辑:这似乎是它应该在5.0之前的c#中工作.在C#5.0(VS2012 +编译器)中,此行为已被修改为我所期望的
static void Main()
{
var list = new List<IEnumerable<int>>();
var numbers = new[] {1, 2, 3};
var numbers2 = new[] {1, 2, 3};
foreach (var number in numbers)
{
var result = from s in numbers2
where s == number
select s;
Console.WriteLine(result.First()); // outputs {1,2,3}
list.Add(result);
}
foreach (var num in list)
{
Console.WriteLine(num.First()); // outputs {3,3,3}
}
}
Run Code Online (Sandbox Code Playgroud)
产量
1 2 3 3 3 3
我在 Windows 窗体上有文本框,我只想在此文本框中插入数字。为此我使用以下 c# 代码
private void ChildAge_TextChanged(object sender, EventArgs e)
{
int i;
if (!int.TryParse(ChildAge.Text, out i))
{
MessageBox.Show("Plaese enter a valid Age");
}
}
Run Code Online (Sandbox Code Playgroud)
它正在工作,但问题是,在显示消息后,当我退格时,内容和文本框变为空,在这种情况下,此消息框也会再次显示。
我正在玩代表和匿名方法,并遇到以下代码:
delegate int IntegerGenerator();
static void Main()
{
IntegerGenerator numberGenerator;
numberGenerator = () =>
{
Console.WriteLine("returns 7");
return 7;
};
numberGenerator += () =>
{
Console.WriteLine("returns 3");
return 3;
};
// This will always return 3
var num = numberGenerator();
Console.WriteLine("Return value: {0}", num);
}
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是委托的Invocation列表中所有方法的返回值.但是,似乎唯一给出的值来自要附加到委托的最后一个方法.一种可能的解决方法是输入集合并只将结果添加到集合中.但是,由于委托的返回类型,这似乎不是解决此问题的正确方法.
如何从委托中附加的方法捕获所有返回值?
我使用下面的代码来设置MdiParent表单的背景图像,它运行良好,但是当我点击最大化按钮时,BackgroundImage在右侧和底部边缘重复(即右侧和底侧图像部分重复),怎么做我避免这种情况并正确显示图像?
public Parent()
{
InitializeComponent();
foreach (Control ctl in this.Controls)
{
if (ctl is MdiClient)
{
ctl.BackgroundImage = Properties.Resources.bg;
ctl.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想写一下如果c#中的Else条件更短,你可以在下面观察我的代码吗'那么冗长..我想要用更短的方式写,帮助我任何人都知道.我们可以使用其他任何方式来写它吗?
int paymentType;
if (lblPayment.Text == "Credit")
{
paymentType = 1;
}
else if (lblPayment.Text == "Open Invoice")
{
paymentType = 2;
}
else if (lblPayment.Text == "COD")
{
paymentType = 3;
}
else if (lblPayment.Text == "Check")
{
paymentType = 4;
}
else if (lblPayment.Text == "Paypal")
{
paymentType = 5;
}
else if (lblPayment.Text == "Money Order")
{
paymentType = 6;
}
else if (lblPayment.Text == "Other")
{
paymentType = 7;
}
Run Code Online (Sandbox Code Playgroud) 我需要禁用按钮一段时间才能运行.我有这个代码:
RelayCommand.cs这是我的命令类.
class RelayCommand : ICommand
{
readonly Action<object> _execute;
readonly Predicate<object> _canExecute;
public RelayCommand(Action<object> execute)
: this(execute, null)
{
}
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
{
throw new ArgumentNullException("execute");
}
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter) …Run Code Online (Sandbox Code Playgroud) 我在我的wpf应用程序中有一个背景图像,我希望实现背景图像连续移动的效果.下面的代码可以实现简单的效果,但是当图片结束的时间再次移过时,我想让这张图片运动的效果一直没有停止的现象.
void StartBackgroudMove()
{
Storyboard sb = new Storyboard();
DoubleAnimation TranslateXExtendAnimation = new DoubleAnimation() { From = 0, To = -100, Duration = TimeSpan.FromMilliseconds(2500) };
Storyboard.SetTarget(TranslateXExtendAnimation, BackgroundImage);
Storyboard.SetTargetProperty(TranslateXExtendAnimation, new PropertyPath("(FrameworkElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));
sb.Children.Add(TranslateXExtendAnimation);
sb.FillBehavior = FillBehavior.Stop;
sb.Completed += (s, args) =>
{
this.StartBackgroudMove();
};
sb.Begin();
}
Run Code Online (Sandbox Code Playgroud) 我有简单的一行代码
var startYearString = DateTime.Parse("03/21/2014").Year;
Run Code Online (Sandbox Code Playgroud)
我希望这可以工作,但它会抛出这样的错误
System.FormatException was unhandled by user code
HResult=-2146233033
Message=String was not recognized as a valid DateTime.
Source=mscorlib
StackTrace:
at System.DateTime.Parse(String s)
at ConnectBLL.usercontrols.users.UserProfile.Page_Load(Object sender, EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
Run Code Online (Sandbox Code Playgroud)
我不知道出了什么问题?