簡體   English   中英

ASP.NET處理lambda

[英]ASP.NET Processing lambdas

以下linq上需要進行什么代碼清除才能驗證電子郵件ID

錯誤: var validemails = emails.Where(p=>IsValidFormat(p)).Select;

 Dictionary<int, string> emails = new Dictionary<int, string>();
 emails.Add(1, "Marry@yahoo.com");
 emails.Add(2, "Helan@gmail.com");
 emails.Add(3, "Rose");
 emails.Add(4, "Ana");
 emails.Add(5, "Dhia@yahoo.com");




public static bool IsValidFormat(string InputEmailID)

{
    var format =
                 @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}.\.[0-9]{1,3}\.)|
                 (([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";

                  Regex Rex=new Regex(format);
                  return Rex.IsMatch(InputEmailID);

 }

錯誤報告:無法從“ System.Collections.Generic.KeyValuePair”轉換為“ string”

您需要向函數發送字符串,而不是KeyValuePair

var validemails = emails.Where(p=>IsValidFormat(p.Value)).Select(kv => kv.Value);

聽起來電子郵件是字典,而不是簡單的IEnumerable<string>

您想要更多類似這樣的東西:

var validemails = emails.Where(p=>IsValidFormat(p.Key));

要么

var validemails = emails.Where(p=>IsValidFormat(p.Value));

取決於“ emailid”是鍵還是字典中的值。

我還將重構您的驗證方法,如下所示:

public static bool IsValidEmail(this string InputEmailID)
{
    var format =
             @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}.\.[0-9]{1,3}\.)|
             (([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";

    Regex Rex=new Regex(format);
    return Rex.IsMatch(InputEmailID);
}

因此,您可以像這樣調用驗證:

var validemails = emails.Where(p=>p.Key.IsValidEmail());

我剛剛嘗試了以下代碼:

using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    public class Program
    {
        private static void Main(string[] args)
        {
            var emails = new Dictionary<int, string>();

            emails.Add(1, "Marry@yahoo.com");
            emails.Add(2, "Helan@gmail.com");
            emails.Add(3, "Rose");
            emails.Add(4, "Ana");
            emails.Add(5, "Dhia@yahoo.com");

            var validemails = emails.Where(p => IsValidFormat(p.Value)).ToList();
        }


        public static bool IsValidFormat(string inputEmailId)
        {
            const string format = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}.\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";

            var rex = new Regex(format);
            return rex.IsMatch(inputEmailId);
        }
    }
}

看起來有效。 我不確定100%發生了什么,但是關鍵是您需要使用p.Value。

我確定有人會解釋更詳細的信息-我希望也能從中學到一些東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM